Safe Haskell | Safe-Infered |
---|
Categorical semirings (my term, but maybe the correct one) are an alternative to Arrows, but play nicely with groupoids. | See the source or the latex source for more background.
- class Category k => Ctor k constr | constr -> k where
- selfmap :: k a b -> k c d -> k (constr a c) (constr b d)
- promote :: Ctor k op => k a b -> k (op a c) (op b c)
- swap_promote :: Ctor k op => k a b -> k (op c a) (op c b)
- class Ctor k op => Absorbs k op id | op -> k, op -> id where
- class Ctor k op => Assocative k op | op -> k where
- class Ctor k op => Commutative k op | op -> k where
- commute :: k (op a b) (op b a)
- class Ctor k op => Annihilates k op zero | op zero -> k where
- annihilates :: k (op zero a) zero
- class (Ctor k add, Ctor k multi) => Distributes k add multi | add multi -> k where
- distribute :: k (multi (add a b) c) (add (multi a c) (multi b c))
- undistribute :: k (add (multi a c) (multi b c)) (multi (add a b) c)
- class (Assocative k dot, Absorbs k dot id) => Monoidial k dot id | dot id -> k
- class (Monoidial k dot id, Commutative k dot) => CommutativeMonoidial k dot id | dot id -> k
- class (CommutativeMonoidial k add zero, CommutativeMonoidial k multi one, Annihilates k multi zero, Distributes k add multi) => Semiring k add zero multi one | add zero multi one -> k
- first :: Semiring a add zero multi one => a b c -> a (multi b d) (multi c d)
- second :: Semiring a add zero multi one => a b c -> a (multi d b) (multi d c)
- left :: Semiring a add zero multi one => a b c -> a (add b d) (add c d)
- right :: Semiring a add zero multi one => a b c -> a (add d b) (add d c)
- class Category g => Groupoid g where
- inv :: g a b -> g b a
- data Iso k a b = Iso {}
- biject_sum_absorb :: Biject (BSum BZero a) a
- biject_sum_assoc :: Biject (BSum (BSum a b) c) (BSum a (BSum b c))
- biject_product_absorb :: Biject (BProduct BOne a) a
- biject_product_assoc :: Biject (BProduct (BProduct a b) c) (BProduct a (BProduct b c))
- biject_distributes :: Biject (BProduct (BSum a b) c) (BSum (BProduct a c) (BProduct b c))
- kbiject_sum_absorb :: Monad m => KBiject m (KBSum KBZero a) a
- kbiject_sum_assoc :: Monad m => KBiject m (KBSum (KBSum a b) c) (KBSum a (KBSum b c))
- kbiject_product_absorb :: Monad m => KBiject m (KBProduct KBOne a) a
- kbiject_product_assoc :: Monad m => KBiject m (KBProduct (KBProduct a b) c) (KBProduct a (KBProduct b c))
- kbiject_distributes :: Monad m => KBiject m (KBProduct (KBSum a b) c) (KBSum (KBProduct a c) (KBProduct b c))
Endofunctors for construction
class Category k => Ctor k constr | constr -> k whereSource
An endofunctor for combining two morphisms|
first/right like functions
swap_promote :: Ctor k op => k a b -> k (op c a) (op c b)Source
construct a new morphism with identity with the arguments reversed|
Laws (Axioms) for building algebraic structures
class Ctor k op => Assocative k op | op -> k whereSource
The assocative law => (x + y) + z <-> x + (y + z)|
Assocative (->) Product | |
Assocative (->) Sum | |
Assocative Biject BProduct | |
Assocative Biject BSum | |
Monad m => Assocative (Kleisli m) KProduct | |
Monad m => Assocative (Kleisli m) KSum | |
Monad m => Assocative (KBiject m) KBProduct | |
Monad m => Assocative (KBiject m) KBSum |
class Ctor k op => Commutative k op | op -> k whereSource
The commutative law => x + y <-> y + x|
Commutative (->) Product | |
Commutative (->) Sum | |
Commutative Biject BProduct | |
Commutative Biject BSum | |
Monad m => Commutative (Kleisli m) KProduct | |
Monad m => Commutative (Kleisli m) KSum | |
Monad m => Commutative (KBiject m) KBProduct | |
Monad m => Commutative (KBiject m) KBSum |
class Ctor k op => Annihilates k op zero | op zero -> k whereSource
The annihilation law => 0 * x <-> 0|
annihilates :: k (op zero a) zeroSource
Annihilates (->) Product Zero | |
Annihilates Biject BProduct BZero | |
Monad m => Annihilates (Kleisli m) KProduct KZero | |
Monad m => Annihilates (KBiject m) KBProduct KBZero |
class (Ctor k add, Ctor k multi) => Distributes k add multi | add multi -> k whereSource
The distribution law => (a + b) * c <-> (a * c) + (b * c)|
distribute :: k (multi (add a b) c) (add (multi a c) (multi b c))Source
undistribute :: k (add (multi a c) (multi b c)) (multi (add a b) c)Source
Distributes (->) Sum Product | |
Distributes Biject BSum BProduct | |
Monad m => Distributes (Kleisli m) KSum KProduct | |
Monad m => Distributes (KBiject m) KBSum KBProduct |
Categorical Algebraic Structures
class (Assocative k dot, Absorbs k dot id) => Monoidial k dot id | dot id -> kSource
Monoidial Category class|
class (Monoidial k dot id, Commutative k dot) => CommutativeMonoidial k dot id | dot id -> kSource
Commutative Monoidial Category class|
CommutativeMonoidial (->) Product One | |
CommutativeMonoidial (->) Sum Zero | |
CommutativeMonoidial Biject BProduct BOne | |
CommutativeMonoidial Biject BSum BZero | |
Monad m => CommutativeMonoidial (Kleisli m) KProduct KOne | |
Monad m => CommutativeMonoidial (Kleisli m) KSum KZero | |
Monad m => CommutativeMonoidial (KBiject m) KBProduct KBOne | |
Monad m => CommutativeMonoidial (KBiject m) KBSum KBZero |
class (CommutativeMonoidial k add zero, CommutativeMonoidial k multi one, Annihilates k multi zero, Distributes k add multi) => Semiring k add zero multi one | add zero multi one -> kSource
Semiring Category class|
Arrow like functions for semiring categories
first :: Semiring a add zero multi one => a b c -> a (multi b d) (multi c d)Source
Apply the multi monoid operator to the morphism and identity|
second :: Semiring a add zero multi one => a b c -> a (multi d b) (multi d c)Source
Apply the multi monoid operator to identity and the morphism|
left :: Semiring a add zero multi one => a b c -> a (add b d) (add c d)Source
Apply the add monoid operator to the morphism and identity|
right :: Semiring a add zero multi one => a b c -> a (add d b) (add d c)Source
Apply the add monoid operator to identity and the morphism|
A groupoid class that is a category. Maybe this is a bad idea?
Assocative Biject BProduct | |
Assocative Biject BSum | |
Commutative Biject BProduct | |
Commutative Biject BSum | |
Ctor Biject BProduct | |
Ctor Biject BSum | |
CommutativeMonoidial Biject BProduct BOne | |
CommutativeMonoidial Biject BSum BZero | |
Monoidial Biject BProduct BOne | |
Monoidial Biject BSum BZero | |
Distributes Biject BSum BProduct | |
Annihilates Biject BProduct BZero | |
Absorbs Biject BProduct BOne | |
Absorbs Biject BSum BZero | |
Semiring Biject BSum BZero BProduct BOne | |
Category k => Category (Iso k) | |
Category k => Groupoid (Iso k) | |
Monad m => Assocative (KBiject m) KBProduct | |
Monad m => Assocative (KBiject m) KBSum | |
Monad m => Commutative (KBiject m) KBProduct | |
Monad m => Commutative (KBiject m) KBSum | |
Monad m => Ctor (KBiject m) KBProduct | |
Monad m => Ctor (KBiject m) KBSum | |
Monad m => CommutativeMonoidial (KBiject m) KBProduct KBOne | |
Monad m => CommutativeMonoidial (KBiject m) KBSum KBZero | |
Monad m => Monoidial (KBiject m) KBProduct KBOne | |
Monad m => Monoidial (KBiject m) KBSum KBZero | |
Monad m => Distributes (KBiject m) KBSum KBProduct | |
Monad m => Annihilates (KBiject m) KBProduct KBZero | |
Monad m => Absorbs (KBiject m) KBProduct KBOne | |
Monad m => Absorbs (KBiject m) KBSum KBZero | |
Monad m => Semiring (KBiject m) KBSum KBZero KBProduct KBOne | |
Newtype (Iso k a b) (k a b, k b a) |
Alegraic laws as isomorphism for groupoid instances
biject_sum_absorb :: Biject (BSum BZero a) aSource
biject_sum_assoc :: Biject (BSum (BSum a b) c) (BSum a (BSum b c))Source
biject_product_absorb :: Biject (BProduct BOne a) aSource
biject_product_assoc :: Biject (BProduct (BProduct a b) c) (BProduct a (BProduct b c))Source
biject_distributes :: Biject (BProduct (BSum a b) c) (BSum (BProduct a c) (BProduct b c))Source
kbiject_sum_absorb :: Monad m => KBiject m (KBSum KBZero a) aSource
kbiject_sum_assoc :: Monad m => KBiject m (KBSum (KBSum a b) c) (KBSum a (KBSum b c))Source
kbiject_product_absorb :: Monad m => KBiject m (KBProduct KBOne a) aSource
kbiject_product_assoc :: Monad m => KBiject m (KBProduct (KBProduct a b) c) (KBProduct a (KBProduct b c))Source
kbiject_distributes :: Monad m => KBiject m (KBProduct (KBSum a b) c) (KBSum (KBProduct a c) (KBProduct b c))Source