[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
> directory,
> > 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.
>
> Tom
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>

Hello,

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...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20150125/8c2e56f7/attachment.html>


More information about the Haskell-Cafe mailing list