0
爲什麼我能做到以下幾點:Haskell Applicative和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
,但我不能這樣做:
f2 = (+) <$> getW1 <*> getW1
,我如何修改F2,這樣它會工作,我打算?
使我疑惑:爲什麼不應用定義實例(Monad m)=> Applicative m?它只對「WrappedMonad m」這樣做。 – MtnViewMark 2010-03-20 07:02:11
啊,我明白了,它需要UndecidableInstances才能這樣做。 – MtnViewMark 2010-03-20 07:05:17
當然,不幸的是,添加這個實例聲明會給你一個孤兒實例。 – Steve 2010-03-23 09:22:24