Arrows are a formulation within HaskellLanguage which can be both monads (See OnMonads) and CoMonads. See http://www.haskell.org/arrows/index.html To quote from the introduction there: ''Arrows are a new abstract view of computation, defined by John Hughes [Hug00]. They serve much the same purpose as monads -- providing a common structure for libraries -- but are more general. In particular they allow notions of computation that may be partially static (independent of the input) or may take multiple inputs. If your application works fine with monads, you might as well stick with them. But if you're using a structure that's very like a monad, but isn't one, maybe it's an arrow.'' [Hug00] JohnHughes, GeneralisingMonadsToArrows, in Science of Computer Programming 37, pp67-111, May 2000. ---- The applications include FunctionalReactiveProgramming, see for example: http://www.haskell.org/yale/papers/haskellworkshop02/ ( BrokenLink ) ---- See also HaskellLanguage and implementation in ScalaLanguage ---- CategoryFunctionalProgramming CategoryHaskell