sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 12:12:39 29 4
mua khóa gpt4 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 中?

1 Câu trả lời

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
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com