{-# 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