{-# LANGUAGE NoImplicitPrelude #-}

module Precursor.Control.Category
  ( -- * Category
    Category
  , (.)
  , id
    -- ** Composition
  , (<<<)
  , (>>>)
    -- * Arrow
  , Arrow
  , arr
  , (***)
  , (&&&)
    -- ** Arrows
  , Kleisli(..)
    -- *** Derived combinators
  ,  returnA
  , (^>>)
  , (>>^)
    -- *** Right-to-left variants
  , (<<^)
  , (^<<)
    -- ** Monoid operations
  , ArrowZero
  , zeroArrow
  , ArrowPlus
  , (<+>)
    -- ** Conditionals
  , ArrowChoice
  , left
  , right
  , (+++)
  , (|||)
    -- ** Arrow application
  , ArrowApply
  , app
  , ArrowMonad(..)
  , leftApp
    -- ** Feedback
  , ArrowLoop
  , loop
  ) where

import           Control.Arrow
import           Control.Category