[Haskell-cafe] Re: monad subexpressions

Claus Reinke claus.reinke at talk21.com
Fri Aug 3 09:12:26 EDT 2007


> can you please rewrite *p++=*q++ in haskell?

assuming these operations

    i :: V a -> IO (V a)   -- incr var addr, return old addr
    r  :: V a -> IO a       -- read var
    w  :: V a -> a -> IO () -- write var value

and this unfolded translation

    do { qv <- r q; w p qv; i p; i q }

assuming further these liftings

    ap1 :: (a->m b) -> (m a->m b)
    ap2 :: (a->b->m c) -> (m a->m b->m c)

then we can define

    (=:) :: IO (V a) -> IO a -> IO ()
    mv =: ma = (ap2 w) mv ma

and get this inlined version

      i p =: (r `ap1` i q)

but one might still prefer

    do { w p =<< r q; i p; i q }

but whatever line-noise one prefers, this still seems a call for
better combinators in the standard libs, rather than a call for
more syntax.

claus



More information about the Haskell-Cafe mailing list