Muss ich Applicative und Functor implementieren, um eine Monade zu implementieren

7

Ich versuche eine Monad-Instanz zu implementieren. Nehmen Sie als ein einfaches Beispiel Folgendes an:

%Vor%

Dies sollte die Standardimplementierung von Maybe sein, soweit ich weiß. Dies kompiliert jedoch nicht, da der Compiler sich beschwert:

  

Keine Instanz für (Applicative Maybee)

und ebenso möchte er eine Funktor-Instanz, sobald der Applicative gegeben ist.

Also: Einfache Frage: Muss ich Functor und Applicative immer implementieren, bevor ich eine Monade implementieren kann?

    
trevore 24.04.2015, 10:14
quelle

3 Antworten

5

Bei GHC 7.10 und höher müssen Sie Functor und Applicative implementieren. Die Klassendefinitionen für Monad schreiben die Superklasseninstanzen vor:

%Vor%

Beachten Sie, dass die Instanzen Monad und Functor generisch ohne zusätzlichen Aufwand definiert werden können, sobald Sie eine Instanz Applicative haben:

%Vor%     
András Kovács 24.04.2015, 10:22
quelle
11

Ja, das war vorher nicht der Fall, es ist eine Änderung, die in ghc7.10 unter dem Namen Functor eingeführt wurde -Applicative-Monad Vorschlag .

    
Nicolas 24.04.2015 10:19
quelle
8

Es ist obligatorisch Instanzen für Functor und Applicative zu definieren (die zweite ist eine neue Anforderung in neueren Versionen von Haskell), aber es ist eigentlich keine große Sache, denn wenn Sie nicht Ihre Hand schreiben wollen eigene Instanzen können Sie einfach diese verwenden:

%Vor%     
Jeremy List 24.04.2015 10:21
quelle