| 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 #