err*_*ter 1 haskell applicative
我有一个功能:
someFun :: Applicative f => f a -> b -> f c
someFun x y = …
Run Code Online (Sandbox Code Playgroud)
对于这个论点y我需要给someFun是"FB"那可以说我有值
someX :: Applicative f => f a
someY :: Applicative f => f b
Run Code Online (Sandbox Code Playgroud)
我试着这样做
LiftA (someFun someX) someY
Run Code Online (Sandbox Code Playgroud)
但这给了我 f (f c)
我需要结果 f c
你要求的是Monads可以做的事情,但是Applicative 不能.使用Monad实例,这只是join:
join :: Monad m => m (m a) -> m a
Run Code Online (Sandbox Code Playgroud)
你要求的是不可能的,但至少现在你有一个完美的例子,你可以用Monad做什么,你不能用Applicative做.