作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题来自文章“Trivial Monad”,地址:http://blog.sigfpe.com/2007/04/trivial-monad.html 。提供的答案是
h x y = x >>= (\x -> g x y)
或同等内容(在文章的上下文中)
h :: W Int -> W Int -> W Int
h x y = bind ( \x-> g x y ) x
其中 g 为
g :: Int -> W Int -> W Int
g x y = y >>= (return . (+x))
对于单子(monad):
数据W a = W a 派生Show
现在我有点困惑,如果 g 接受 Int
作为第一个参数,但 x 是 W Int
,那么如何将 x 放入 g 中?
最佳答案
Now I am a little confused, how can you put x in g if it takes an Int as first parameter but x is M Int?
有两个不同的 x
变量,内部变量在 lambda 表达式内隐藏外部变量。编写代码的更清晰的方法是这样的
h mx my = mx >>= (\x -> g x my)
关于haskell - 如何定义签名为 h::M Int -> M Int -> M Int 的函数,以便 h (M x) (M y) = M (x+y) 而不解开 monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035468/
我是一名优秀的程序员,十分优秀!