gpt4 book ai didi

haskell - Hask 中的仿函数和自由对象

转载 作者:行者123 更新时间:2023-12-04 05:15:06 26 4
gpt4 key购买 nike

基于 Wikipedia's definition of a free object ,在我看来,每个 Functor 在 Hask 中都是 Free 的。相反,每个自由对象也应该是一个仿函数。这是正确的,还是我误解了?

最佳答案

我不确定你的意思。很多时候,在函数式编程上下文中,分类定义的编写比人们想要的更通用。与其使用使用具体类别的维基百科定义,不如考虑将您想要的免费事物类型视为参数时获得的定义。

定义:免费的 foo。 类型上的免费 foo T是一个对象 FT使得 F是一个 foo 和一个函数 i :: T -> FT使得任何其他 foo S和一个函数 f :: T -> S存在唯一的 foo 态射 f'使得 f' . i = f .

插入说“幺半群”,你会得到自由的幺半群,群,你会得到自由群,等等。注意,这个定义基本上没有使用范畴论,当然也没有谈论仿函数。它不像维基百科给出的定义那么正式,但应该直观地工作。鉴于此定义,免费施工是制作自由对象的一般方法。例如 []为幺半群提供了一个免费的构造,其中 [a]a 上的自由幺半群所有 a .

我不认为所有的仿函数都是自由仿函数。我也不认为 Hask 中的所有自由构造都是 Haskell 仿函数(所有自由构造导致抽象仿函数都是微不足道的)。

我对“免费”的定义仅适用于实物* ,但更一般的定义也适用于其他种类。例如,免费的 monad。

你可以全力以赴去做一些疯狂的事情。例如,您可能可以在 Sing k 上定义自由 bool 代数。 (单例类型 k )其中 k可以使用 GADT 枚举。这涉及到一些“函数式”的东西在 Hask 中是非常不明显的。

关于haskell - Hask 中的仿函数和自由对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387839/

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