Hey Mark,

How can I concisely compose these functions without having to write a cascade of case statements such as:

case f1 rec1 of
    Nothing -> return Nothing
    Just id1 -> do
                    rec2 <- f2 id2
                    return $ case rec2 of
                                Nothing -> return Nothing
                                Just rec2' -> case f3 rec2' of
                                                ....
I understand that if I was just dealing with Maybe I could use the fact that Maybe is a monad.
Yes, you can write like this:

id2 <- f1 rec1
rec2 <- f2 id2
rec3 <- f3 rec2
return rec3
or, even shorter:
id2 <- f1 rec1
rec2 <- f2 id2
f3 rec2

The cool thing of the Maybe monad is that it combines a result in such a way that it removes the plumbing of constantly checking for Nothing. I can definitely recommand you the following tutorials:

http://www.nomaware.com/monads/html/index.html
http://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html

Those two tutorials really helped me.

Good luck,
Chris
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to