Safe Haskell | None |
---|---|
Language | Haskell2010 |
Control.Category.Free
Documentation
data IsCategory Source #
Constructors
HasCategory | |
NoCategory |
data IsSymmetricProduct Source #
Constructors
HasSymmetricProduct | |
NoSymmetricProduct |
data IsSymmetricSum Source #
Constructors
HasSymmetricSum | |
NoSymmetricSum |
data IsMonoidalProduct Source #
Constructors
HasMonoidalProduct | |
NoMonoidalProduct |
data IsMonoidalSum Source #
Constructors
HasMonoidalSum | |
NoMonoidalSum |
data IsCartesian Source #
Constructors
HasCartesian | |
NoCartesian |
data IsCocartesian Source #
Constructors
HasCocartesian | |
NoCocartesian |
data IsRecursive Source #
Constructors
HasRecursive | |
NoRecursive |
data Requirements Source #
type family ConstraintsOf (x :: anykind) (k :: * -> * -> *) = (c :: Constraint) where ... Source #
Equations
type FreeFunction c a b = Catalyst ('Req 'HasCategory 'HasSymmetricProduct 'HasSymmetricSum 'HasMonoidalProduct 'HasMonoidalSum 'HasCartesian 'HasCocartesian 'HasRecursive 'HasFixed) c Source #
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
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 #