ich Haskell/Category theory bin Lesen und hier ist die definition of monad aus diesem Artikel:Gibt es bei allen Monad-Instanzen in Haskell nur unterschiedliche Möglichkeiten für die Zuordnung von Hask zu Hask?
A Monade eine spezielle Art von Funktor ist, aus einer Kategorie zu gleichen Kategorie, die einige zusätzliche Struktur unterstützt. Also, bis Definitionen. A ist ein monadisch Funktors M: C-> C, zusammen mit zwei morphisms für jeden Objekt X in C:
Einheit: X -> M (X)
JOIN: M (M (X)) -> M (X)
Wie ich es verstehe, in Haskell return
entspricht unit
. Aber mit return
kann ich schreiben:
x :: [Int] -- x is a member of Lst category
x = return 5
und dies gilt Code in Haskell. Nun, wie Sie sehen können, ist 5
hier kein Mitglied von Lst
, aber return
funktioniert dafür.
Also, ich denke, dass Lst
nicht С ist von M: C-> C. Aber wer dann?
Vielleicht ist die richtige Antwort Hask
, aber ich bin mir nicht sicher, dass „Funktors aus einer Kategorie zu seinem Unter“ ist das gleiche wie „Funktor von einer Kategorie zur gleichen Kategorie“.
Was ist 'Hask'? – Thilo
Es ist aus „Haskell/Categry Theorie“: „Die Hauptkategorie wir sie mit in diesem Artikel würden über Hask ist, die Haskell-Typen als Objekte und Haskell Funktionen wie morphisms behandelt ...“ – azaviruha
Die 'M: C -> C "entspricht" m "in der Klasse Monad m wobei .." und "C" ist die Kategorie "Hask", aber im Kontext "..: C -> C" bezieht sich "C" auf ein Objekt von 'C', was in diesem Fall ein Typ ist. Ich denke, es ist "richtiger", "M: Obj (C) -> Obj (C)" zu schreiben. – user2407038