[Haskell-cafe] Monad layering and DSL
Gautier DI FOLCO
gautier.difolco at gmail.com
Sun Jan 25 21:39:48 UTC 2015
2015-01-25 9:37 GMT+01:00 Tom Ellis <
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk>:
> On Sat, Jan 24, 2015 at 07:46:52PM +0100, Gautier DI FOLCO wrote:
> > data ImapF next =
> > Select DirectoryName (Maybe DirectoryDescription -> next)
> > | Noop (DirectoryDescription -> next)
> > | Search MailSearch (Maybe [UID] -> next)
> > -- Functor instance
> > type Imap = Free ImapF
> > searchAll :: Imap (Maybe [UID])
> > searchAll = liftF $ Search undefined id
> > select :: DirectoryName -> Imap (Maybe DirectoryDescription)
> > select directory = liftF $ Select directory id
> > My main problem is the following: if I do a select of an unknown
> > I should stop the computation.
> What do you mean you "should stop the computation"? Do you mean the
> interpretation of the free monad should be forced to stop? If so, doesn't
> making the type of the `Select` constructor
> Select DirectoryName (DirectoryDescription -> next)
> achieve this? That way if the interpreter talks issues a select command to
> the server and fails to receive a `DirectoryDescription` in return then it
> is forced to stop.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
Thanks for your answer.
If I do it this way, the evaluation is forced to be stopped, I have no way
to react to this error.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe