proarrow
Safe HaskellNone
LanguageGHC2024

Proarrow.Category.Instance.Monoid

Description

A monoid as a one-object category: the single object M, with the monoid's elements Unit ~> m as the morphisms. For a commutative monoid the tensor is the monoid operation itself, making it symmetric monoidal, Closed, StarAutonomous and CompactClosed, with a cocommutative comonoid on M and hence CopyDiscard.

It is deliberately not cartesian or cocartesian. A one-object category has a terminal object only when its hom-set is a singleton, and likewise has binary products only when fst . (f &&& g) = f forces combine f g = f -- both hold only for the trivial monoid. The corresponding instances would be unlawful for every other m, so they are omitted rather than given a definition that type-checks.

Documentation

data MONOID (m :: k) Source Github #

Constructors

M 

Instances

Instances details
Monoid m => Enumerable (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

withIndex :: forall (a :: MONOID m) r. Ob a => (KnownIndex a => r) -> r Source Github #

withOb :: forall (a :: MONOID m) r. KnownIndex a => (Ob a => r) -> r Source Github #

atOb :: forall (i :: Nat). SNat i -> AtOb (MONOID m) (At (MONOID m) i) Source Github #

Finite (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Associated Types

type Objects (MONOID m) 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Objects (MONOID m) = '['M :: MONOID m]

Methods

finite :: IndexedList (Objects (MONOID m)) Source Github #

withAtLookup :: forall (i :: Nat) r. SNat i -> (Lookup (Objects (MONOID m)) i ~ At (MONOID m) i => r) -> r Source Github #

Indexed (MONOID m) Source Github #

A monoid is a one-object category, so its kind has one inhabitant, at index zero. Said directly rather than left to the Objects default, so that it reduces for a not-yet-known inhabitant -- which is how withOb learns there is only M.

Instance details

Defined in Proarrow.Category.Instance.Monoid

CommutativeMonoid m => Monoidal (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Associated Types

type Unit 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Unit = 'M :: MONOID m

Methods

withOb2 :: forall (a :: MONOID m) (b :: MONOID m) r. (Ob a, Ob b) => (Ob (a ** b) => r) -> r Source Github #

leftUnitor :: forall (a :: MONOID m). Ob a => ((Unit :: MONOID m) ** a) ~> a Source Github #

leftUnitorInv :: forall (a :: MONOID m). Ob a => a ~> ((Unit :: MONOID m) ** a) Source Github #

rightUnitor :: forall (a :: MONOID m). Ob a => (a ** (Unit :: MONOID m)) ~> a Source Github #

rightUnitorInv :: forall (a :: MONOID m). Ob a => a ~> (a ** (Unit :: MONOID m)) Source Github #

associator :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => ((a ** b) ** c) ~> (a ** (b ** c)) Source Github #

associatorInv :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => (a ** (b ** c)) ~> ((a ** b) ** c) Source Github #

CommutativeMonoid m => SymMonoidal (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

swap :: forall (a :: MONOID m) (b :: MONOID m). (Ob a, Ob b) => (a ** b) ~> (b ** a) Source Github #

CommutativeMonoid m => Closed (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

withObExp :: forall (a :: MONOID m) (b :: MONOID m) r. (Ob a, Ob b) => (Ob (a ~~> b) => r) -> r Source Github #

curry :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b) => ((a ** b) ~> c) -> a ~> (b ~~> c) Source Github #

apply :: forall (a :: MONOID m) (b :: MONOID m). (Ob a, Ob b) => ((a ~~> b) ** a) ~> b Source Github #

(^^^) :: forall (a :: MONOID m) (b :: MONOID m) (x :: MONOID m) (y :: MONOID m). (b ~> y) -> (x ~> a) -> (a ~~> b) ~> (x ~~> y) Source Github #

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

Defined in Proarrow.Category.Instance.Monoid

Methods

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

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

CommutativeMonoid m => CopyDiscard (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

copy :: forall (a :: MONOID m). Ob a => a ~> (a ** a) Source Github #

discard :: forall (a :: MONOID m). Ob a => a ~> (Unit :: MONOID m) Source Github #

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

Defined in Proarrow.Category.Instance.Monoid

Methods

withObDual :: forall (a :: MONOID m) r. Ob a => (Ob (Dual a) => r) -> r Source Github #

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

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

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

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

Monoid m => CategoryOf (MONOID m) Source Github #

A monoid as a one object category.

Instance details

Defined in Proarrow.Category.Instance.Monoid

Associated Types

type (~>) 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type (~>) = Mon :: MONOID m -> MONOID m -> Type
CommutativeMonoid m => CocommutativeComonoid ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

CommutativeMonoid m => Comonoid ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

counit :: ('M :: MONOID m) ~> (Unit :: MONOID m) Source Github #

comult :: ('M :: MONOID m) ~> (('M :: MONOID m) ** ('M :: MONOID m)) Source Github #

Monoid m => EnrichedProfunctor (Clone k) (Mon :: MONOID m -> MONOID m -> Type) Source Github #

A monoid is a one object enriched category.

Instance details

Defined in Proarrow.Category.Enriched

Methods

withProObj :: forall (a :: MONOID m) (b :: MONOID m) r. (Ob a, Ob b) => (Ob (ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) => r) -> r Source Github #

underlying :: forall (a :: MONOID m) (b :: MONOID m). Mon a b -> (Unit :: Clone k) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b Source Github #

enriched :: forall (a :: MONOID m) (b :: MONOID m). (Ob a, Ob b) => ((Unit :: Clone k) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) -> Mon a b Source Github #

rmap :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => (HomObj (Clone k) b c ** ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a c Source Github #

lmap :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => (HomObj (Clone k) c a ** ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) c b Source Github #

CommutativeMonoid m => MonoidalProfunctor (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

one :: Mon (Unit :: MONOID m) (Unit :: MONOID m) Source Github #

(**) :: forall (x1 :: MONOID m) (x2 :: MONOID m) (y1 :: MONOID m) (y2 :: MONOID m). Mon x1 x2 -> Mon y1 y2 -> Mon (x1 ** y1) (x2 ** y2) Source Github #

Monoid m => Profunctor (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

dimap :: forall (c :: MONOID m) (a :: MONOID m) (b :: MONOID m) (d :: MONOID m). (c ~> a) -> (b ~> d) -> Mon a b -> Mon c d Source Github #

lmap :: forall (c :: MONOID m) (a :: MONOID m) (b :: MONOID m). (c ~> a) -> Mon a b -> Mon c b Source Github #

rmap :: forall (b :: MONOID m) (d :: MONOID m) (a :: MONOID m). (b ~> d) -> Mon a b -> Mon a d Source Github #

(\\) :: forall (a :: MONOID m) (b :: MONOID m) r. ((Ob a, Ob b) => r) -> Mon a b -> r Source Github #

Monoid m => Promonad (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

id :: forall (a :: MONOID m). Ob a => Mon a a Source Github #

(.) :: forall (b :: MONOID m) (c :: MONOID m) (a :: MONOID m). Mon b c -> Mon a b -> Mon a c Source Github #

type Objects (MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Objects (MONOID m) = '['M :: MONOID m]
type Unit Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Unit = 'M :: MONOID m
type (~>) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type (~>) = Mon :: MONOID m -> MONOID m -> Type
type At (MONOID m) i Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type At (MONOID m) i = Lookup (Objects (MONOID m)) i
type Index (a :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Index (a :: MONOID m) = 'Z
type Ob (a :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Ob (a :: MONOID m) = a ~ ('M :: MONOID m)
type (a :: MONOID m) ~~> (b :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type (a :: MONOID m) ~~> (b :: MONOID m) = 'M :: MONOID m
type Dual ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type Dual ('M :: MONOID m) = 'M :: MONOID m
type ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) ('M :: MONOID m) ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Enriched

type ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) ('M :: MONOID m) ('M :: MONOID m) = 'SUB m :: SUBCAT (Any :: k -> Constraint)
type ('M :: MONOID m) ** ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

type ('M :: MONOID m) ** ('M :: MONOID m) = 'M :: MONOID m

data Mon (a :: MONOID m) (b :: MONOID m1) where Source Github #

Constructors

Mon :: forall {k} {k1} {m1 :: k1} (m :: k). ((Unit :: k) ~> m) -> Mon ('M :: MONOID m) ('M :: MONOID m1) 

Instances

Instances details
Monoid m => EnrichedProfunctor (Clone k) (Mon :: MONOID m -> MONOID m -> Type) Source Github #

A monoid is a one object enriched category.

Instance details

Defined in Proarrow.Category.Enriched

Methods

withProObj :: forall (a :: MONOID m) (b :: MONOID m) r. (Ob a, Ob b) => (Ob (ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) => r) -> r Source Github #

underlying :: forall (a :: MONOID m) (b :: MONOID m). Mon a b -> (Unit :: Clone k) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b Source Github #

enriched :: forall (a :: MONOID m) (b :: MONOID m). (Ob a, Ob b) => ((Unit :: Clone k) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) -> Mon a b Source Github #

rmap :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => (HomObj (Clone k) b c ** ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a c Source Github #

lmap :: forall (a :: MONOID m) (b :: MONOID m) (c :: MONOID m). (Ob a, Ob b, Ob c) => (HomObj (Clone k) c a ** ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) a b) ~> ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) c b Source Github #

CommutativeMonoid m => MonoidalProfunctor (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

one :: Mon (Unit :: MONOID m) (Unit :: MONOID m) Source Github #

(**) :: forall (x1 :: MONOID m) (x2 :: MONOID m) (y1 :: MONOID m) (y2 :: MONOID m). Mon x1 x2 -> Mon y1 y2 -> Mon (x1 ** y1) (x2 ** y2) Source Github #

Monoid m => Profunctor (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

dimap :: forall (c :: MONOID m) (a :: MONOID m) (b :: MONOID m) (d :: MONOID m). (c ~> a) -> (b ~> d) -> Mon a b -> Mon c d Source Github #

lmap :: forall (c :: MONOID m) (a :: MONOID m) (b :: MONOID m). (c ~> a) -> Mon a b -> Mon c b Source Github #

rmap :: forall (b :: MONOID m) (d :: MONOID m) (a :: MONOID m). (b ~> d) -> Mon a b -> Mon a d Source Github #

(\\) :: forall (a :: MONOID m) (b :: MONOID m) r. ((Ob a, Ob b) => r) -> Mon a b -> r Source Github #

Monoid m => Promonad (Mon :: MONOID m -> MONOID m -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Monoid

Methods

id :: forall (a :: MONOID m). Ob a => Mon a a Source Github #

(.) :: forall (b :: MONOID m) (c :: MONOID m) (a :: MONOID m). Mon b c -> Mon a b -> Mon a c Source Github #

type ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) ('M :: MONOID m) ('M :: MONOID m) Source Github # 
Instance details

Defined in Proarrow.Category.Enriched

type ProObj (Clone k) (Mon :: MONOID m -> MONOID m -> Type) ('M :: MONOID m) ('M :: MONOID m) = 'SUB m :: SUBCAT (Any :: k -> Constraint)