我对monad函数有些困惑.函数monad定义如下:
instance Monad ((->) r) where
return x = \_ -> x
h >>= f = \w -> f (h w) w
Run Code Online (Sandbox Code Playgroud)
我尝试通过编写绑定操作来解决它:
( (*2) >>= (+10) ) 3
(return 3) :: ((->) Int)
Run Code Online (Sandbox Code Playgroud)
但它造成了错误.我还尝试将函数AddStuff重写为绑定操作.
addStuff = do
a <- (*2)
b <- (+10)
return (a+b)
Run Code Online (Sandbox Code Playgroud)
然后将此函数转换为
addStuff' w = (*2) w >>= (\a ->
(+10) w >>= (\b ->
return (a+b) ))
Run Code Online (Sandbox Code Playgroud)
我查看了新功能的类型
addStuff :: (Monad m, Num (m b), Num b) => m b -> m b
Run Code Online (Sandbox Code Playgroud)
这是为什么?我该如何解决这个问题?