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