相关疑难解决方法(0)

关于函数monad

我对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)

这是为什么?我该如何解决这个问题?

monads haskell

9
推荐指数
1
解决办法
4696
查看次数

标签 统计

haskell ×1

monads ×1