gpt4 book ai didi

haskell - 为什么 join 是独立的,而不是 Monad 类型类最小实现的一部分?

转载 作者:行者123 更新时间:2023-12-02 06:38:42 25 4
gpt4 key购买 nike

我更喜欢通过 join 函数定义 Monad 实例,而不是 >>= ...从该等价开始:

x >>= f = join (fmap f x)

你能只用 join 定义一个 Monad 实例吗?

我希望加入 Monad 时使用: {-# MINIMAL (>>=)|加入#-}

为什么 join 位于顶层,甚至不在 Monad 类型类中?

最佳答案

遗憾的是,由于与广义新类型派生和角色系统相关的技术限制,join 并不是 GHC 标准库中 Monad 类型类的一部分。长话短说,给定一些新类型 newtype T m a = MkT (m a),GHC 不够聪明,无法弄清楚如何证明 m (m a)m (T m a),这是证明 join 第一个参数的表示相等性所必需的(其类型为 m (m a) -> m a )。

幸运的是,GHC Haskell 最近的一个扩展,QuantifiedConstraints,可能使角色系统足够智能来支持这一点。有关问题及其潜在解决方案的更详细处理,请参阅 Ryan Scott 的博客文章 How QuantifiedConstraints can let us put join back in Monad .

关于haskell - 为什么 join 是独立的,而不是 Monad 类型类最小实现的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597106/

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