linear-smc-1.0.0: Build SMC morphisms using linear types
Safe HaskellNone
LanguageHaskell2010

Control.Category.Linear

Documentation

data P k r a Source #

unit :: forall k con r. (Obj k r, Monoidal k, con (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r () Source #

split :: forall con a b r k. (O3 k r a b, Monoidal k, con (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r (a b) -> (P k r a, P k r b) Source #

merge :: forall con a b r k. (O3 k r a b, Monoidal k, con (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => (P k r a, P k r b) -> P k r (a b) Source #

pattern (:::) :: forall con (k :: Type -> Type -> Type) r a b. (Obj k r, Obj k a, Obj k b, Monoidal k, con (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r a -> P k r b -> P k r (a, b) infixr 9 Source #

encode :: O3 k r a b => (a `k` b) -> P k r a -> P k r b Source #

decode :: forall a b k con. (con (), con ~ Obj k, Monoidal k, con a, con b, forall α β. (con α, con β) => con (α, β)) => (forall r. Obj k r => P k r a -> P k r b) -> a `k` b Source #

reduce :: (Obj cat ~ con, ProdObj con, forall α β. (con α, con β) => con (α, β), con (), con a, con b) => Cat cat con a b -> FreeSMC cat con a b Source #

(!:) :: forall con a b r k. (O3 k r a b, Monoidal k, con (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r a -> P k r b -> P k r (a, b) Source #

ignore :: (Monoidal k, O3 k r a (), forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r () -> P k r a -> P k r a Source #

copy :: (Cartesian k, O2 k r a, forall α β. (con α, con β) => con (α, β), con ~ Obj k) => P k r a -> P k r (a a) Source #

discard :: (Cartesian k, O2 k r a, forall α β. (con α, con β) => con (α, β), con ~ Obj k, con ()) => P k r a -> P k r () Source #