gpt4 book ai didi

haskell - 如何定义签名为 h::M Int -> M Int -> M Int 的函数,以便 h (M x) (M y) = M (x+y) 而不解开 monad?

转载 作者:行者123 更新时间:2023-12-02 12:12:39 29 4
gpt4 key购买 nike

这个问题来自文章“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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com