Pourquoi est-ce que je peux faire ce qui suit:Haskell Applicative et ErrorT?
import Data.Word
import Data.Binary.Get
import Control.Applicative
import Control.Monad.Error
getW1 :: ErrorT String Get Word8
getW1 = lift getWord8
f1 = (+1) <$> getW1
mais je ne peux pas faire:
f2 = (+) <$> getW1 <*> getW1
et comment je dois-je modifier f2 de sorte qu'il fonctionne comme je compte?
à se demander: Pourquoi ne pas définir Applicative instance (Monad m) => Applicative m? Il le fait seulement pour "WrappedMonad m". – MtnViewMark
Ah, je vois, il faudrait UndecidableInstances pour le faire. – MtnViewMark
Bien sûr, ajouter cette déclaration d'instance vous laissera malheureusement une instance orpheline. – Steve