GArrowCurry(..),
GArrowApply(..),
+ GArrowKappa(..),
GArrowSTKC(..),
GArrowSTLC(..),
GArrowPCF(..)
) where
-import Control.Category
+import Control.Category hiding ((.))
+import Prelude hiding (id)
------------------------------------------------------------------------
-- The main GArrow class
------------------------------------------------------------------------
--- Reify and Reflect, which are "curried" versions
+-- Reify and Reflect, which are "curried" versions of eval/const
-- If you have this for R the identity map on types, you're basically
-- a Control.Arrow; you can also define essentially all the other
------------------------------------------------------------------------
+-- The Kappa adjunction
+--
+-- See Hasegawa, Decomposing Typed Lambda Calculus into a Couple of
+-- Categorical Programming Languages) section 3, rule $(\times L)$
+
+class GArrow g (**) u => GArrowKappa g (**) u where
+ ga_kappa :: (g u x -> g u y) -> g x y
+
+
+
+
+
+------------------------------------------------------------------------
-- Apply and Curry
class GArrow g (**) u => GArrowApply g (**) u (~>) where