[Haskell-cafe] Re: monad subexpressions

Claus Reinke claus.reinke at talk21.com
Fri Aug 3 16:30:14 EDT 2007

> I'll dig for it later if you like.  The essence of the matter was a 
> bunch of functions that looked something like this:
> foo = do b' <- readTVar b
>         c' <- readTVar c
>         d' <- readTvar d
>         return (b' + c' / d')
> In other words, a string of readTVar statements, followed by one 
> computation on the results.  Each variable name has to be duplicated 
> before it can be used, and the function is four lines long instead of 
> one.

if that happens frequently, an instance of the numeric classes 
seems called for, automating both the lifting and the readTVar,
but if there are only a couple of cases, you could lift the operations 
for the module, or even per definition:

    foo1 b c d = readTVar b + readTVar c / readTVar d
      where (+) = liftM2 (Prelude.+)
            (/) = liftM2 (Prelude./)


More information about the Haskell-Cafe mailing list