
I would not advocate using the fail operation in a monad. It doesn't belong there, and hopefully it will go away some day. :) -- Lennart On Dec 23, 2006, at 02:21 , Stefan O'Rear wrote:
On Fri, Dec 22, 2006 at 08:05:08PM -0500, Steve Downey wrote:
Although terse, the subject really says it all. If i've a partial function, like a parser, what is considered good style for a library. The tradeoffs that I can see are that Maybe is a binary operation, while Error can communicate more information in the type of the error case. Is there some way to defer the error handling Monad to the calling context?
Your title answers the question. :)
All monads provide a "fail" operation, and any function that uses fail will be able to work with any monad's error handling mechanism.
* Maybe - fail msg is Nothing (ignores the message) * Either str - fail msg is Left msg (stores the message) * IO - fail msg is ioError (userError msg) (throws message as exception)
For instance, Data.Map.minView is Monad m => Set a -> m (Set a, a); so..
minView :: Set a -> Maybe (Set a, a) -- gives Nothing on empty set minView :: Set a -> [(Set a, a)] -- gives [] on empty set minView :: Set a -> IO (Set a, a) -- throws an ioError on empty set ...
(note that the behaivor of lookup et al, which are specific to Maybe, is considered outdated style) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe