gpt4 book ai didi

haskell - 仿函数和内仿函数之间的区别

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

有人可以简单地解释一下两者之间的区别吗?我不完全理解单子(monad)是仿函数与仿函数的部分。

最佳答案

仿函数可以从一个类别转到另一个类别,endofunctor 是起始类别和目标类别相同的仿函数。

与自同态与态射相同。

现在,为什么单子(monad)必须是内仿函数?

有句著名的话是“单子(monad)只是内仿函数类别中的幺半群”。幸运的是,其他人已经解释得相当好in this answer .

单子(monad)必须是一个endofunctor的关键点是join,它在Haskell中被称为,或者μ,因为它通常在类别中被称为理论,是单子(monad)定义的一部分。现在

Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a

因此,将仿函数 m 应用于对象(在 Hask 中,Haskell 类型作为对象和函数作为态射的类别,一种类型)的结果必须是一个 m 可以再次应用。这意味着它必须属于仿函数 m 域的类别。

如果仿函数的域和辅助域相同(严格来说,如果其辅助域是其域的子类别),换句话说,如果它是一个内仿函数,则该仿函数只能与自身组成。由于与其自身的可组合性是 monad 定义的一部分,因此 monad 更不用说是内仿函数了。

1 一种定义,也可以使用 (>>=)bind 定义 monad,并将 join 作为派生属性。

关于haskell - 仿函数和内仿函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342876/

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