In diesem Foliensatz von Jim Duey auf Folie 13 - er schlägt vor, dass alle Monaden anwendbare Funktoren sind.
In der Haskell 7.7 Compiler-Ausgabe - ich sehe das folgende (ein anderes Beispiel ist hier ):
"Parser" ist eine Instanz von Monad, aber nicht Applicative - dies wird in GHC 7.10 unter dem Applicative-Monad-Vorschlag zu einem Fehler.
Bedeutet dies, dass der Haskell-Compiler derzeit Monaden toleriert, die keine anwendungsbezogenen Funktoren sind - aber der Plan ist, dies zu korrigieren?
Im Moment ist Applicative
keine Oberklasse von Monad
aber es ist geplant, dass dies in GHC 7.10 so geändert wird, dass Applicative
eine Oberklasse von Monad
ist. Um den Übergang zu erleichtern, wird in GHC 7.7 und 7.8 die Warnung ausgegeben, wenn GHC auf eine Monad
ohne eine Applicative
Instanz trifft.
Nun ist das etwas verwirrende Bit, dass alle gültigen Monad
s Anwendungsfunktoren sind, auch wenn sie nicht instance
s von Applicative
sind. Wir können schreiben
welche zusammen die Signatur und die Gesetze von Functor
und Applicative
erfüllen. Aus diesem Grund ist es sinnvoll, die Superklassenbeschränkung hinzuzufügen, und es ist ein rein historischer Zufall, dass sie im ersten Fall nicht vorhanden war.% Co_de% s wurden entdeckt und popularisiert, weit nachdem Applicative
s waren.
Weitere Informationen dazu, wie Monad
und Applicative
zusammenhängen, werfen Sie einen Blick auf eine Antwort, die ich zuvor geschrieben habe: Ist es besser, Functor in Bezug auf Applicate in Bezug auf Monad zu definieren, oder umgekehrt ?
Tags und Links haskell fam-proposal monads