On Thu, 2 Oct 2008, Andrew Coppin wrote:
Consider the following beautiful code:
run :: State -> Foo -> ResultSet State
run_and :: State -> Foo -> Foo -> ResultSet State
run_and s0 x y = do
s1 <- run s0 x
s2 <- run s1 y
return s2
run_or :: State -> Foo -> Foo -> ResultSet State
run_or s0 x y = merge (run s0 x) (run s0 y)
That works great. Unfortunately, I made some alterations to the
functionallity the program has, and now it is actually possible for 'run' to
fail. When this happens, a problem should be reported to the user. (By "user"
I mean "the person running my compiled application".) After an insane amount
of time making my head hurt, I disocvered that the type "Either ErrorType
(ResultSet State)" is actually a monad. (Or rather, a monad within a monad.)
Unfortunately, this causes some pretty serious problems:
run :: State -> Foo -> Either ErrorType (ResultSet State)
You may also like to use:
http://hackage.haskell.org/packages/archive/explicit-exception/0.0.1/doc/html/Control-Monad-Exception-Synchronous.html
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe