2016-07-09 13 views
3

Control.Category.Associative erklärt die morphism associate:Haskell: Control.Category.Monoidal: Inverse von Associate, IDL und idr

class Bifunctor p k k k => Associative k p where 
    associate :: k (p (p a b) c) (p a (p b c)) 

Aber, wie ich monoidal Kategorien zu verstehen, sollte die Assoziator ein Isomorphismus sein. Wo ist die Umkehrung? Control.Categor.Monoidal deklariert es auch nicht, nur die linken und rechten Einheit Komponenten (idl und idr), und auch ihre Inverse.

Gibt es eine Möglichkeit, die Inversen von diesen Morphismen in einer kanonischen Weise zu erhalten, die ich übersehen habe, oder warum werden die Inversen weggelassen?

+1

'Kategorie-Extras' ist für eine Weile veraltet. Haben Sie ['Associative'] (https://hackage.haskell.org/package/categories-1.0.7/docs/Control-Category-Associative.html) aus dem 'categories'-Ersatzpaket gelesen? Dieses Paket enthält auch ['Monoidal] (https://hackage.haskell.org/package/categories-1.0.7/docs/Control-Category-Monoidal.html) mit Inversen. –

+0

Ah danke, ich wusste nicht, dass es veraltet war. –

Antwort

2

Sieht aus wie die Umkehrung durch die Klasse Coassociative definiert wird, und es ist wahrscheinlich nur so für mehr Granularität und Allgemeinheit.

+0

Der Typ ist richtig, aber ist "Co" normalerweise nicht etwas anderes als "invers"? –

+0

Ah guter Punkt. Wir brauchen wahrscheinlich eine Art Gesetz, das die beiden in Beziehung setzt ... – luqui

+0

Wenn das stimmt, dann sind die Inversen für 'idl' und' idr' in 'Comonoidal'. Die Dokumentation sagt: Diese Typklasse wird auch (ab) für die inversen Operationen verwendet, die für eine strenge (Co-) Monoid-Kategorie benötigt werden. Eine strenge (co) monoidale Kategorie ist eine, die sowohl monoidal als auch comonoidal ist und die folgenden Gesetze erfüllt: –