digestive-functors and listOf

22 views
Skip to first unread message

Neil

unread,
Jul 31, 2015, 6:55:54 PM7/31/15
to Haskell-cafe
I've been able to use digestive-functors with simple forms successfully in a snap application; however, I'm getting stuck when trying to handle a list of hidden inputs. There is something I'm not quite getting on how to use 'listOf'. Can anyone point me in the right direction? Thanks.

The rendered html from a previous page includes the following hidden fields:

<div id='messageForm.recipients' class='inputList'>
  <input type='hidden' name='messageForm.recipients.indices' value='0' />
  <input type='hidden' id='messageForm.recipients.-1.email' name='messageForm.recipients.-1.email' value />
  <input type='hidden' id='messageForm.recipients.0.email' name='messageForm.recipients.0.email' value='emai1l@email.com' /> 
  <input type='hidden' id='messageForm.recipients.1.email' name='messageForm.recipients.1.email' value='email2@email.com' /> 
</div>


The data types are:

data ConfirmMessage = ConfirmMessage {
  isoDate :: T.Text,
  subject :: T.Text,
  body    :: T.Text,
  action  :: T.Text,
  recipients :: [Recipient]
} deriving (Show) 

data Recipient = Recipient {
  email :: T.Text 
} deriving (Show)


The forms are:
messageForm :: (Monad m) => Form T.Text m ConfirmMessage messageForm = ConfirmMessage <$> "isoDate" .: stringRead "Missing ISOdate" Nothing <*> "subject" .: stringRead "Subject required" Nothing <*> "body" .: stringRead "Body required" Nothing <*> "action" .: stringRead "Missing action" Nothing <*> "recipients" .: listOf recipientForm' Nothing recipientForm' :: (Monad m) => Formlet T.Text m Recipient recipientForm'= Recipient <$> "email" .: stringRead "Missing email" Nothing Error message: Couldn't match type `Text.Digestive.Form.Internal.FormTree m0 v0 m0 Recipient' with `Maybe Recipient -> Form T.Text m Recipient' Expected type: Formlet T.Text m Recipient Actual type: Text.Digestive.Form.Internal.FormTree m0 v0 m0 Recipient Relevant bindings include recipientForm' :: Formlet T.Text m Recipient (bound at src/Handler/TradeNotifyConfirm.hs:224:1) In the expression: Recipient <$> "email" .: stringRead "Missing email" Nothing In an equation for `recipientForm'': recipientForm' = Recipient <$> "email" .: stringRead "Missing email" Nothing
Thanks in advance,
Neil
Reply all
Reply to author
Forward
0 new messages