proarrow
Safe HaskellNone
LanguageGHC2024

Proarrow.Object.Dual

Documentation

class Ob (Dual a) => ObDual (a :: k) Source Github #

Instances

Instances details
Ob (Dual a) => ObDual (a :: k) Source Github # 
Instance details

Defined in Proarrow.Object.Dual

class (SymMonoidal k, Closed k, Ob (Unit :: k), forall (a :: k). Ob a => ObDual a) => StarAutonomous k where Source Github #

Associated Types

type Dual (a :: k) :: k Source Github #

Methods

dual :: forall (a :: k) (b :: k). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: k) (b :: k). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: k) (b :: k) (c :: k). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: k) (b :: k) (c :: k). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

Instances

Instances details
StarAutonomous Nat Source Github # 
Instance details

Defined in Proarrow.Category.Instance.ZX

Associated Types

type Dual (x :: Nat) 
Instance details

Defined in Proarrow.Category.Instance.ZX

type Dual (x :: Nat) = x

Methods

dual :: forall (a :: Nat) (b :: Nat). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: Nat) (b :: Nat). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: Nat) (b :: Nat) (c :: Nat). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous BOOL Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Bool

Associated Types

type Dual 'TRU 
Instance details

Defined in Proarrow.Category.Instance.Bool

type Dual 'TRU = 'FLS
type Dual 'FLS 
Instance details

Defined in Proarrow.Category.Instance.Bool

type Dual 'FLS = 'TRU

Methods

dual :: forall (a :: BOOL) (b :: BOOL). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: BOOL) (b :: BOOL). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: BOOL) (b :: BOOL) (c :: BOOL). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: BOOL) (b :: BOOL) (c :: BOOL). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous KIND Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cat

Associated Types

type Dual ('K a :: KIND) 
Instance details

Defined in Proarrow.Category.Instance.Cat

type Dual ('K a :: KIND) = 'K (OPPOSITE a)

Methods

dual :: forall (a :: KIND) (b :: KIND). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: KIND) (b :: KIND). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: KIND) (b :: KIND) (c :: KIND). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: KIND) (b :: KIND) (c :: KIND). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous FINREL Source Github # 
Instance details

Defined in Proarrow.Category.Instance.FinRel

Associated Types

type Dual (n :: FINREL) 
Instance details

Defined in Proarrow.Category.Instance.FinRel

type Dual (n :: FINREL) = n

Methods

dual :: forall (a :: FINREL) (b :: FINREL). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: FINREL) (b :: FINREL). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: FINREL) (b :: FINREL) (c :: FINREL). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: FINREL) (b :: FINREL) (c :: FINREL). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous LINEAR Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Linear

Associated Types

type Dual ('L a :: LINEAR) 
Instance details

Defined in Proarrow.Category.Instance.Linear

type Dual ('L a :: LINEAR) = 'L (Not a)

Methods

dual :: forall (a :: LINEAR) (b :: LINEAR). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: LINEAR) (b :: LINEAR). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: LINEAR) (b :: LINEAR) (c :: LINEAR). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: LINEAR) (b :: LINEAR) (c :: LINEAR). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous () Source Github # 
Instance details

Defined in Proarrow.Object.Dual

Associated Types

type Dual '() 
Instance details

Defined in Proarrow.Object.Dual

type Dual '() = '()

Methods

dual :: forall (a :: ()) (b :: ()). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: ()) (b :: ()). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: ()) (b :: ()) (c :: ()). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: ()) (b :: ()) (c :: ()). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

HasPushouts k => StarAutonomous (COSPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cospan

Methods

dual :: forall (a :: COSPAN k) (b :: COSPAN k). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: COSPAN k) (b :: COSPAN k). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: COSPAN k) (b :: COSPAN k) (c :: COSPAN k). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: COSPAN k) (b :: COSPAN k) (c :: COSPAN k). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

TracedMonoidal k => StarAutonomous (INT k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.IntConstruction

Methods

dual :: forall (a :: INT k) (b :: INT k). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: INT k) (b :: INT k). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: INT k) (b :: INT k) (c :: INT k). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: INT k) (b :: INT k) (c :: INT k). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

Num a => StarAutonomous (MatK a) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Mat

Methods

dual :: forall (a0 :: MatK a) (b :: MatK a). (a0 ~> b) -> Dual b ~> Dual a0 Source Github #

dualInv :: forall (a0 :: MatK a) (b :: MatK a). (Ob a0, Ob b) => (Dual a0 ~> Dual b) -> b ~> a0 Source Github #

linDist :: forall (a0 :: MatK a) (b :: MatK a) (c :: MatK a). (Ob a0, Ob b, Ob c) => ((a0 ** b) ~> Dual c) -> a0 ~> Dual (b ** c) Source Github #

linDistInv :: forall (a0 :: MatK a) (b :: MatK a) (c :: MatK a). (Ob a0, Ob b, Ob c) => (a0 ~> Dual (b ** c)) -> (a0 ** b) ~> Dual c Source Github #

HasPullbacks k => StarAutonomous (SPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Span

Methods

dual :: forall (a :: SPAN k) (b :: SPAN k). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: SPAN k) (b :: SPAN k). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: SPAN k) (b :: SPAN k) (c :: SPAN k). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: SPAN k) (b :: SPAN k) (c :: SPAN k). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

StarAutonomous (KLEISLI (Cont r)) Source Github # 
Instance details

Defined in Proarrow.Promonad.Cont

Methods

dual :: forall (a :: KLEISLI (Cont r)) (b :: KLEISLI (Cont r)). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: KLEISLI (Cont r)) (b :: KLEISLI (Cont r)). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: KLEISLI (Cont r)) (b :: KLEISLI (Cont r)) (c :: KLEISLI (Cont r)). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: KLEISLI (Cont r)) (b :: KLEISLI (Cont r)) (c :: KLEISLI (Cont r)). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

CommutativeMonoid m => StarAutonomous (MONOIDK m) Source Github # 
Instance details

Defined in Proarrow.Monoid

Methods

dual :: forall (a :: MONOIDK m) (b :: MONOIDK m). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: MONOIDK m) (b :: MONOIDK m). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: MONOIDK m) (b :: MONOIDK m) (c :: MONOIDK m). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: MONOIDK m) (b :: MONOIDK m) (c :: MONOIDK m). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

(StarAutonomous j, StarAutonomous k) => StarAutonomous (j, k) Source Github # 
Instance details

Defined in Proarrow.Object.Dual

Methods

dual :: forall (a :: (j, k)) (b :: (j, k)). (a ~> b) -> Dual b ~> Dual a Source Github #

dualInv :: forall (a :: (j, k)) (b :: (j, k)). (Ob a, Ob b) => (Dual a ~> Dual b) -> b ~> a Source Github #

linDist :: forall (a :: (j, k)) (b :: (j, k)) (c :: (j, k)). (Ob a, Ob b, Ob c) => ((a ** b) ~> Dual c) -> a ~> Dual (b ** c) Source Github #

linDistInv :: forall (a :: (j, k)) (b :: (j, k)) (c :: (j, k)). (Ob a, Ob b, Ob c) => (a ~> Dual (b ** c)) -> (a ** b) ~> Dual c Source Github #

dualObj :: forall {k} (a :: k). (StarAutonomous k, Ob a) => Obj (Dual a) Source Github #

doubleNeg :: forall {k} (a :: k). (StarAutonomous k, Ob a) => Dual (Dual a) ~> a Source Github #

doubleNegInv :: forall {k} (a :: k). (StarAutonomous k, Ob a) => a ~> Dual (Dual a) Source Github #

doubleNegIso :: forall {k} (a :: k) (a' :: k). (StarAutonomous k, Ob a, Ob a') => Iso a a' (Dual (Dual a)) (Dual (Dual a')) Source Github #

type ExpSA (a :: k) (b :: k) = Dual (a ** Dual b) Source Github #

currySA :: forall {k} (a :: k) (b :: k) (c :: k). (StarAutonomous k, Ob a, Ob b) => ((a ** b) ~> c) -> a ~> ExpSA b c Source Github #

applySA :: forall {k} (b :: k) (c :: k). (StarAutonomous k, Ob b, Ob c) => (ExpSA b c ** b) ~> c Source Github #

expSA :: forall {k} (a :: k) (b :: k) (x :: k) (y :: k). StarAutonomous k => (b ~> y) -> (x ~> a) -> ExpSA a b ~> ExpSA x y Source Github #

dualityUnitSA :: forall {k} (a :: k). (StarAutonomous k, Ob a) => (Unit :: k) ~> Dual (Dual a ** a) Source Github #

dualityCounitSA :: forall {k} (a :: k). (StarAutonomous k, Ob a) => (Dual a ** a) ~> Dual (Unit :: k) Source Github #

class (StarAutonomous k, SymMonoidal k) => CompactClosed k where Source Github #

Methods

distribDual :: forall (a :: k) (b :: k). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: k) ~> (Unit :: k) Source Github #

Instances

Instances details
CompactClosed Nat Source Github # 
Instance details

Defined in Proarrow.Category.Instance.ZX

Methods

distribDual :: forall (a :: Nat) (b :: Nat). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: Nat) ~> (Unit :: Nat) Source Github #

CompactClosed KIND Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cat

Methods

distribDual :: forall (a :: KIND) (b :: KIND). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: KIND) ~> (Unit :: KIND) Source Github #

CompactClosed FINREL Source Github # 
Instance details

Defined in Proarrow.Category.Instance.FinRel

Methods

distribDual :: forall (a :: FINREL) (b :: FINREL). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: FINREL) ~> (Unit :: FINREL) Source Github #

CompactClosed () Source Github # 
Instance details

Defined in Proarrow.Object.Dual

Methods

distribDual :: forall (a :: ()) (b :: ()). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: ()) ~> (Unit :: ()) Source Github #

HasPushouts k => CompactClosed (COSPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cospan

Methods

distribDual :: forall (a :: COSPAN k) (b :: COSPAN k). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: COSPAN k) ~> (Unit :: COSPAN k) Source Github #

TracedMonoidal k => CompactClosed (INT k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.IntConstruction

Methods

distribDual :: forall (a :: INT k) (b :: INT k). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: INT k) ~> (Unit :: INT k) Source Github #

Num a => CompactClosed (MatK a) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Mat

Methods

distribDual :: forall (a0 :: MatK a) (b :: MatK a). (Ob a0, Ob b) => Dual (a0 ** b) ~> (Dual a0 ** Dual b) Source Github #

dualUnit :: Dual (Unit :: MatK a) ~> (Unit :: MatK a) Source Github #

HasPullbacks k => CompactClosed (SPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Span

Methods

distribDual :: forall (a :: SPAN k) (b :: SPAN k). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: SPAN k) ~> (Unit :: SPAN k) Source Github #

CommutativeMonoid m => CompactClosed (MONOIDK m) Source Github # 
Instance details

Defined in Proarrow.Monoid

Methods

distribDual :: forall (a :: MONOIDK m) (b :: MONOIDK m). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: MONOIDK m) ~> (Unit :: MONOIDK m) Source Github #

(CompactClosed j, CompactClosed k) => CompactClosed (j, k) Source Github # 
Instance details

Defined in Proarrow.Object.Dual

Methods

distribDual :: forall (a :: (j, k)) (b :: (j, k)). (Ob a, Ob b) => Dual (a ** b) ~> (Dual a ** Dual b) Source Github #

dualUnit :: Dual (Unit :: (j, k)) ~> (Unit :: (j, k)) Source Github #

distribDualInv :: forall {k} (a :: k) (b :: k). (CompactClosed k, Ob a, Ob b) => (Dual a ** Dual b) ~> Dual (a ** b) Source Github #

dualityUnit :: forall {k} (a :: k). (CompactClosed k, Ob a) => (Unit :: k) ~> (a ** Dual a) Source Github #

dualityCounit :: forall {k} (a :: k). (CompactClosed k, Ob a) => (Dual a ** a) ~> (Unit :: k) Source Github #

combineDual :: forall {k} (a :: k) (b :: k). (CompactClosed k, Ob a, Ob b) => (Dual a ** Dual b) ~> Dual (a ** b) Source Github #

dimension :: forall {k} (a :: k). (CompactClosed k, Ob a) => (Unit :: k) ~> (Unit :: k) Source Github #

traceCC :: forall {k} (u :: k) (x :: k) (y :: k). (CompactClosed k, Ob x, Ob y, Ob u) => ((x ** u) ~> (y ** u)) -> x ~> y Source Github #

coactCC :: forall {m} {k} (u :: m) (x :: k) (y :: k). (CompactClosed m, MonoidalAction m k, Ob x, Ob y, Ob u) => (Act u x ~> Act u y) -> x ~> y Source Github #