-{-# OPTIONS -XRankNTypes -XMultiParamTypeClasses -XNoMonomorphismRestriction -XTypeOperators -XFunctionalDependencies -XTypeFamilies -XFlexibleContexts #-}
+{-# LANGUAGE MultiParamTypeClasses, TypeOperators, FunctionalDependencies, TypeFamilies, FlexibleContexts #-}
-----------------------------------------------------------------------------
-- |
-- Module : GHC.HetMet.GArrow
GArrowUnit,
GArrowExponent,
- GArrowKappa(..),
- GArrowSTKC(..),
+ GArrowCopyDropSwap(..),
+ GArrowCopyDropSwapLoop(..),
GArrowSTLC(..),
GArrowPCF(..)
------------------------------------------------------------------------
-- The main GArrow class
-class Category g => GArrow g (**) u | (**) -> u, u -> (**) where
+class Category g => GArrow g (**) u | g (**) -> u, g u -> (**) where
--id :: g x x
--comp :: g x y -> g y z -> g x z
ga_first :: g x y -> g (x ** z) (y ** z)
-- Loop
class GArrow g (**) u => GArrowLoop g (**) u where
- ga_loopl :: g (x**z) (y**z) -> g x y
- ga_loopr :: g (z**x) (z**y) -> g x y
+ ga_loopr :: g (x**z) (y**z) -> g x y
+ ga_loopl :: g (z**x) (z**y) -> g x y
------------------------------------------------------------------------
+
+
------------------------------------------------------------------------
-- Reify and Reflect, which are "curried" versions of eval/const
-------------------------------------------------------------------------
--- 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
-- However, in daily practice it's a pain to have all those extra type
-- variables floating around. If you'd like to hide them, you can use
-- the type families below to do so; see the definition of class
--- GArrowSTKC for an example. Keep in mind, however, that any given
+-- GArrowCopyDropSwap for an example. Keep in mind, however, that any given
-- type may only have a single instance declared using the type
-- families.
--
------------------------------------------------------------------------
-- Commonly Implemented Collections of Classes
---
--- The simply typed KAPPA calculus; see Hasegawa, __Decomposing Typed
--- Lambda Calculus into a Couple of Categorical Programming
--- Languages__, http://dx.doi.org/10.1007/3-540-60164-3_28
---
-
class (GArrowDrop g (GArrowTensor g) (GArrowUnit g),
GArrowCopy g (GArrowTensor g) (GArrowUnit g),
GArrowSwap g (GArrowTensor g) (GArrowUnit g)) =>
- GArrowSTKC g
+ GArrowCopyDropSwap g
+
+class (GArrowDrop g (GArrowTensor g) (GArrowUnit g),
+ GArrowCopy g (GArrowTensor g) (GArrowUnit g),
+ GArrowSwap g (GArrowTensor g) (GArrowUnit g),
+ GArrowLoop g (GArrowTensor g) (GArrowUnit g)) =>
+ GArrowCopyDropSwapLoop g
-- The simply typed LAMBDA calculus
class (GArrowDrop g (GArrowTensor g) (GArrowUnit g),