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?
Bei GHC 7.10 und höher müssen Sie Functor
und Applicative
implementieren. Die Klassendefinitionen für Monad
schreiben die Superklasseninstanzen vor:
Beachten Sie, dass die Instanzen Monad
und Functor
generisch ohne zusätzlichen Aufwand definiert werden können, sobald Sie eine Instanz Applicative
haben:
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 .
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:
Tags und Links haskell applicative fam-proposal monads functor