| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Circuit.Dagger
Contents
Description
The free dagger category over a base arrow.
A Dagger value pairs a forward arrow with a backward arrow.
Composition is covariant forward and contravariant backward;
transpose swaps the two directions.
The structural rules (Copy Discard Merge / Zero and their
tensor-generic forms) live in Circuit.Bimonoid. This module only
provides the free dagger construction and the way it dualises a bimonoid:
forward copy corresponds to backward merge, forward discard to backward
zero, and vice versa.
Free dagger category
data Dagger (arr :: k -> k -> Type) (a :: k) (b :: k) Source #
The free dagger category over a base arrow.
Dagger arr a b is a pair of arrows arr a b (forward) and
arr b a (backward). Composition is covariant forward, contravariant
backward: Dagger f g . Dagger f' g' = Dagger (f . f') (g' . g).
>>>let d = Dagger (+1) (subtract 1) :: Dagger (->) Int Int>>>front d 56>>>back d 65
Constructors
| Dagger | |
Instances
| Channel t arr => Channel (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
Defined in Circuit.Dagger | |
| Strength t arr => Strength (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
| Traced t arr => Traced (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
| Action t arr => Action (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
Defined in Circuit.Dagger | |
| Tensor t arr => Tensor (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
| Unital t arr => Unital (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) Source # | |
| (CopyT t arr a, MergeT t arr a) => CopyT (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) (a :: k) Source # | Tensor-generic bimonoid interlock through These instances mirror the cartesian ones above, but work for any wiring
tensor
|
Defined in Circuit.Dagger | |
| (DiscardT t arr a, ZeroT t arr a) => DiscardT (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) (a :: k) Source # | |
| (MergeT t arr a, CopyT t arr a) => MergeT (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) (a :: k) Source # | |
Defined in Circuit.Dagger | |
| (ZeroT t arr a, DiscardT t arr a) => ZeroT (t :: k -> k -> k) (Dagger arr :: k -> k -> Type) (a :: k) Source # | |
| Category arr => Category (Dagger arr :: k -> k -> Type) Source # | |
| (Discard arr a, Zero arr a) => Discard (Dagger arr :: Type -> Type -> Type) (a :: Type) Source # | |
Defined in Circuit.Dagger | |
| (Zero arr a, Discard arr a) => Zero (Dagger arr :: Type -> Type -> Type) (a :: Type) Source # | |
Defined in Circuit.Dagger | |
| (Copy arr a, Merge arr a) => Copy (Dagger arr) a Source # | Forward copy, backward add — the bimonoid self-duality. The interlock is the point to notice: |
Defined in Circuit.Dagger | |
| (Merge arr a, Copy arr a) => Merge (Dagger arr) a Source # | Forward add, backward copy. |
Defined in Circuit.Dagger | |