{-# LANGUAGE Safe #-}

-- |
--
-- Module      :  Control.Arrow
-- Copyright   :  (c) Ross Paterson 2002
-- License     :  BSD-style (see the LICENSE file in the distribution)
--
-- Maintainer  :  libraries@haskell.org
-- Stability   :  provisional
-- Portability :  portable
--
-- Basic arrow definitions, based on
--
--  * /Generalising Monads to Arrows/, by John Hughes,
--    /Science of Computer Programming/ 37, pp67-111, May 2000.
--
-- plus a couple of definitions ('returnA' and 'loop') from
--
--  * /A New Notation for Arrows/, by Ross Paterson, in /ICFP 2001/,
--    Firenze, Italy, pp229-240.
--
-- These papers and more information on arrows can be found at
-- <http://www.haskell.org/arrows/>.

module Control.Arrow
    (-- *  Arrows
     Arrow(..),
     Kleisli(..),
     -- **  Derived combinators
     returnA,
     (^>>),
     (>>^),
     (>>>),
     (<<<),
     -- **  Right-to-left variants
     (<<^),
     (^<<),
     -- *  Monoid operations
     ArrowZero(..),
     ArrowPlus(..),
     -- *  Conditionals
     ArrowChoice(..),
     -- *  Arrow application
     ArrowApply(..),
     ArrowMonad(..),
     leftApp,
     -- *  Feedback
     ArrowLoop(..)
     ) where

import GHC.Internal.Control.Arrow