这个问题来自http://blog.sigfpe.com/2007/04/trivial-monad.html上的文章"Trivial Monad" .提供的答案是
h x y = x >>= (\x -> g x y)
Run Code Online (Sandbox Code Playgroud)
或等效(在文章的上下文中)
h :: W Int -> W Int -> W Int
h x y = bind ( \x-> g x y ) x
Run Code Online (Sandbox Code Playgroud)
其中g是
g :: Int -> W Int -> W Int
g x y = y >>= (return . (+x))
Run Code Online (Sandbox Code Playgroud)
对于monad:
data W a = W a deriving Show
现在我有点困惑,如果它Int作为第一个参数但是x是W Int什么,你怎么能把x放入g ?
现在我有点困惑,如果将Int作为第一个参数但x是M Int,你怎么能把x放入g?
有两个不同的x变量,内部变量在lambda表达式内部遮蔽外部变量.编写代码的更清晰的方法就是这样
h mx my = mx >>= (\x -> g x my)
Run Code Online (Sandbox Code Playgroud)