gpt4 book ai didi

monads - 为部分应用的函数绑定(bind)类实例

转载 作者:行者123 更新时间:2023-12-05 01:31:14 25 4
gpt4 key购买 nike

Prelude中Bind类的定义是:

class Apply m <= Bind m where
bind :: forall a b. m a -> (a -> m b) -> m b

它可以被理解为一个函数,它接受两个输入参数,一个单子(monad)上下文中的值(m a)和一个函数(a -> m b) 并在 monadic 上下文中返回一个值 (m b)。

部分应用函数的Bind实例定义为:

instance bindFn :: Bind ((->) r) where
bind m f x = f (m x) x

这是一个采用三个 参数的函数。如何进行类型检查?

如果我尝试将 m a 替换为更具体的类型,我会得到(如果我错了请纠正我):

(((->) ??) a) -> (a -> (((->) ??) b)) -> (((->) ??) b)

相当于

(?? -> a) -> (a -> (?? -> b)) -> (?? -> b)

假设变量 m 绑定(bind)到 (?? -> a),f 将绑定(bind)到 a -> ?? -> bx 到第二个 ??

我的推理是否正确?

最佳答案

Which is a function taking three parameters. How does that typecheck?

据我所知,在当前上下文中这个函数签名:

bind m f x = f (m x) x

应该等于:

bind m f = \x -> f (m x) x

关于monads - 为部分应用的函数绑定(bind)类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42051621/

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