
On Sun, Jan 25, 2015 at 10:39:48PM +0100, Gautier DI FOLCO wrote:
2015-01-25 9:37 GMT+01:00 Tom Ellis < tom-lists-haskell-cafe-2013@jaguarpaw.co.uk>:
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
On Sat, Jan 24, 2015 at 07:46:52PM +0100, Gautier DI FOLCO wrote: 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.
If I do it this way, the evaluation is forced to be stopped, I have no way to react to this error.
Could you explain more precisely what you are trying to achieve, perhaps with an example? Tom