{-# language Arrows #-} addA :: Arrow a => a b Int -> a b Int -> a b Int addA f g = proc x -> do y <- f -< x ; z <- g -< x returnA -< y + z
wird übersetzt in entsprechende punktfreie Notation
addA f g = arr (\ x -> (x, x)) >>> first f >>> arr (\ (y, x) -> (x, y)) >>> first g >>> arr (\ (z, y) -> y + z)...und ggf. weiter vereinfacht
http://www.haskell.org/arrows/syntax.html