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.htmlhttp://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html
Those two tutorials really helped me.
Good luck,
Chris