2015-01-25 9:37 GMT+01:00 Tom Ellis <tom-lists-haskell-cafe-2013@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@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.