gpt4 book ai didi

haskell - 类型类是必不可少的吗?

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

我曾经在 haskell beginners 上问过一个问题, 是使用 data/newtype 还是 typeclass。在我的特殊情况下,事实证明不需要类型类。此外,Tom Ellis 给了我一个绝妙的建议,当有疑问时该怎么做:

The simplest way of answering this which is mostly correct is:

    use data



我知道类型类可以使一些东西更漂亮,但 AFIK 不多。还让我感到震惊的是,类型类主要用于脑干的东西,而在较新的东西中,几乎没有引入新的类型类,一切都是用数据/新类型完成的。

现在我想知道是否存在绝对需要类型类并且无法用 data/newtype 表达的情况?

StackOverflow 上回答类似问题加布里埃尔冈萨雷斯说

Use type classes if:

    There is only one correct behavior per given type

    The type class has associated equations (i.e. "laws") that all instances must satisfy



唔 ..

或者类型类和数据/新类型是否因为历史原因而存在某种相互竞争的概念?

最佳答案

在大多数情况下,类型类是无关紧要的。任何类型类代码都可以机械转换为 dictionary-passing风格。它们主要提供便利,有时提供必要的便利(参见 kmett 的回答)。

有时类型类的单实例属性用于强制执行不变量。例如,您无法转换 Data.Set安全地进入字典传递样式,因为如果你用两个不同的 Ord 插入两次字典,你可以打破数据结构的不变性。当然,您仍然可以将任何工作代码转换为字典传递样式的工作代码,但您将无法取缔尽可能多的损坏代码。

法律是 typeclass 的另一个重要文化方面。编译器不强制执行法律,但 Haskell 程序员希望类型类具有所有实例都满足的法律。这可以是 leveraged为某些功能提供更严格的保证。这种优势仅来自社区的约定,而不是语言的正式属性。

关于haskell - 类型类是必不可少的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25855507/

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