Haskell - kannst du eine Monade haben, die kein anwendungsbezogener Funktor ist?

8

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?

    
hawkeye 17.11.2013, 04:08
quelle

1 Antwort

10

Im Moment ist Applicative keine Oberklasse von Monad

%Vor%

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

%Vor%

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.

%Vor%

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 ?

    
J. Abrahamson 17.11.2013, 04:13
quelle

Tags und Links