catalyst-0.0.0.1: A Category typeclass hierarchy powerful enough to encode full programs.
Safe HaskellNone
LanguageHaskell2010

Control.Category.Free

Documentation

data IsFixed Source #

Constructors

HasFixed 
NoFixed 

data Catalyst (r :: Requirements) (p :: * -> * -> *) a b where Source #

Constructors

ID :: r ~ 'Req 'HasCategory symP symS monP monS cart cocart rec fix => Catalyst r p x x 
Comp :: Catalyst ('Req 'HasCategory symP symS monP monS cart cocart rec fix) p x y -> Catalyst ('Req 'HasCategory symP symS monP monS cart cocart rec fix) p y z -> Catalyst ('Req 'HasCategory symP symS monP monS cart cocart rec fix) p x z 
Swap :: r ~ 'Req 'HasCategory 'HasSymmetricProduct symS monP monS cart cocart rec fix => Catalyst r p (a, b) (b, a) 
Reassoc :: r ~ 'Req 'HasCategory 'HasSymmetricProduct symS monP monS cart cocart rec fix => Catalyst r p (a, (b, c)) ((a, b), c) 
SwapE :: r ~ 'Req cat symP 'HasSymmetricSum monP monS cart cocart rec fix => Catalyst r p (Either a b) (Either b a) 
ReassocE :: r ~ 'Req cat symP 'HasSymmetricSum monP monS cart cocart rec fix => Catalyst r p (Either a (Either b c)) (Either (Either a b) c) 
First :: r ~ 'Req cat symP symS 'HasMonoidalProduct monS cart cocart rec fix => Catalyst r p a b -> Catalyst r p (a, m) (b, m) 
Second :: r ~ 'Req cat symP symS 'HasMonoidalProduct monS cart cocart rec fix => Catalyst r p a b -> Catalyst r p (m, a) (m, b) 
Alongside :: r ~ 'Req cat symP symS 'HasMonoidalProduct monS cart cocart rec fix => Catalyst r p a b -> Catalyst r p a' b' -> Catalyst r p (a, a') (b, b') 
Fanout :: r ~ 'Req cat symP symS monP monS 'HasCartesian cocart rec fix => Catalyst r p a b -> Catalyst r p a b' -> Catalyst r p a (b, b') 
Left' :: r ~ 'Req cat symP symS monP 'HasMonoidalSum cart cocart rec fix => Catalyst r p a b -> Catalyst r p (Either a x) (Either b x) 
Right' :: r ~ 'Req cat symP symS monP 'HasMonoidalSum cart cocart rec fix => Catalyst r p a b -> Catalyst r p (Either x a) (Either x b) 
EitherOf :: r ~ 'Req cat symP symS monP 'HasMonoidalSum cart cocart rec fix => Catalyst r p a b -> Catalyst r p a' b' -> Catalyst r p (Either a a') (Either b b') 
Fanin :: r ~ 'Req cat symP symS monP monS cart 'HasCocartesian rec fix => Catalyst r p a b -> Catalyst r p a' b -> Catalyst r p (Either a a') b 
Copy :: r ~ 'Req cat symP symS monP monS 'HasCartesian cocart rec fix => Catalyst r p x (x, x) 
Consume :: r ~ 'Req cat symP symS monP monS 'HasCartesian cocart rec fix => Catalyst r p x () 
Fst :: r ~ 'Req cat symP symS monP monS 'HasCartesian cocart rec fix => Catalyst r p (a, b) a 
Snd :: r ~ 'Req cat symP symS monP monS 'HasCartesian cocart rec fix => Catalyst r p (a, b) b 
InjectL :: r ~ 'Req cat symP symS monP monS cart 'HasCocartesian rec fix => Catalyst r p a (Either a b) 
InjectR :: r ~ 'Req cat symP symS monP monS cart 'HasCocartesian rec fix => Catalyst r p b (Either a b) 
Unify :: r ~ 'Req cat symP symS monP monS cart 'HasCocartesian rec fix => Catalyst r p (Either a a) a 
Tag :: r ~ 'Req cat symP symS monP monS cart 'HasCocartesian rec fix => Catalyst r p (Bool, a) (Either a a) 
RecurseL :: r ~ 'Req cat symP symS monP monS cart cocart 'HasRecursive fix => Catalyst r p (Either a d) (Either b d) -> Catalyst r p a b 
RecurseR :: r ~ 'Req cat symP symS monP monS cart cocart 'HasRecursive fix => Catalyst r p (Either d a) (Either d b) -> Catalyst r p a b 
FixL :: r ~ 'Req cat symP symS monP monS cart cocart rec 'HasFixed => Catalyst r p (a, d) (b, d) -> Catalyst r p a b 
FixR :: r ~ 'Req cat symP symS monP monS cart cocart rec 'HasFixed => Catalyst r p (d, a) (d, b) -> Catalyst r p a b 
LiftC :: p a b -> Catalyst r p a b 

Instances

Instances details
r ~ 'Req 'HasCategory symP symS monP monS cart cocart rec fix => Category (Catalyst r c :: Type -> Type -> Type) Source # 
Instance details

Defined in Control.Category.Free

Methods

id :: forall (a :: k). Catalyst r c a a #

(.) :: forall (b :: k) (c0 :: k) (a :: k). Catalyst r c b c0 -> Catalyst r c a b -> Catalyst r c a c0 #

r ~ 'Req 'HasCategory symP 'HasSymmetricSum monP monS cart cocart rec fix => SymmetricSum (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

swapE :: Catalyst r c (Either l r0) (Either r0 l) Source #

reassocE :: Catalyst r c (Either a (Either b c0)) (Either (Either a b) c0) Source #

r ~ 'Req 'HasCategory 'HasSymmetricProduct symS monP monS cart cocart rec fix => SymmetricProduct (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

swap :: Catalyst r c (l, r0) (r0, l) Source #

reassoc :: Catalyst r c (a, (b, c0)) ((a, b), c0) Source #

r ~ 'Req 'HasCategory symP 'HasSymmetricSum monP 'HasMonoidalSum cart cocart rec fix => MonoidalSum (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

(+++) :: Catalyst r c al bl -> Catalyst r c ar br -> Catalyst r c (Either al ar) (Either bl br) Source #

left :: Catalyst r c a b -> Catalyst r c (Either a c0) (Either b c0) Source #

right :: Catalyst r c a b -> Catalyst r c (Either c0 a) (Either c0 b) Source #

r ~ 'Req 'HasCategory 'HasSymmetricProduct symS 'HasMonoidalProduct monS cart cocart rec fix => MonoidalProduct (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

(***) :: Catalyst r c al bl -> Catalyst r c ar br -> Catalyst r c (al, ar) (bl, br) Source #

first' :: Catalyst r c a b -> Catalyst r c (a, c0) (b, c0) Source #

second' :: Catalyst r c a b -> Catalyst r c (c0, a) (c0, b) Source #

r ~ 'Req 'HasCategory symP 'HasSymmetricSum monP 'HasMonoidalSum cart 'HasCocartesian rec fix => Cocartesian (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

(|||) :: Catalyst r c al b -> Catalyst r c ar b -> Catalyst r c (Either al ar) b Source #

injectL :: Catalyst r c a (Either a b) Source #

injectR :: Catalyst r c a (Either b a) Source #

unify :: Catalyst r c (Either a a) a Source #

tag :: Catalyst r c (Bool, a) (Either a a) Source #

r ~ 'Req 'HasCategory 'HasSymmetricProduct symS 'HasMonoidalProduct monS 'HasCartesian cocart rec fix => Cartesian (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

(&&&) :: Catalyst r c a l -> Catalyst r c a r0 -> Catalyst r c a (l, r0) Source #

consume :: Catalyst r c a () Source #

copy :: Catalyst r c a (a, a) Source #

fst' :: Catalyst r c (l, r0) l Source #

snd' :: Catalyst r c (l, r0) r0 Source #

r ~ 'Req 'HasCategory symP symS monP monS cart cocart rec 'HasFixed => Fixed (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

fixL :: Catalyst r c (a, s) (b, s) -> Catalyst r c a b Source #

fixR :: Catalyst r c (s, a) (s, b) -> Catalyst r c a b Source #

r ~ 'Req 'HasCategory symP symS monP monS cart cocart 'HasRecursive fix => Recursive (Catalyst r c) Source # 
Instance details

Defined in Control.Category.Free

Methods

recurseL :: Catalyst r c (Either a s) (Either b s) -> Catalyst r c a b Source #

recurseR :: Catalyst r c (Either s a) (Either s b) -> Catalyst r c a b Source #

(forall x y. Show (c x y)) => Show (Catalyst r c a b) Source # 
Instance details

Defined in Control.Category.Free

Methods

showsPrec :: Int -> Catalyst r c a b -> ShowS #

show :: Catalyst r c a b -> String #

showList :: [Catalyst r c a b] -> ShowS #

runFree :: forall r p c a b. ConstraintsOf r p => (forall x y. c x y -> p x y) -> Catalyst r c a b -> p a b Source #

liftC :: c a b -> Catalyst r c a b Source #