gpt4 book ai didi

haskell - 为什么 Sum 和 Product 没有 Enum 实例?

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

如果您导入 Data.Monoid ,你会发现 Sum , Product , All , Any没有 Enum 实例,尽管 BoolIntegral 实例有。提供一个实例(例如Enum a => Enum (Sum a))是否有意义?有什么理论上的理由不这样做吗?我也很欣赏深入了解其背后理论的链接。

最佳答案

提供这些实例难道没有意义吗?不是很多。这些新类型的目的是,您可以在想要处理通用 Monoid 实例的函数中使用具体的数字类型。这个想法是,您将参数包装在 newtype 构造函数中,应用 Monoid 多态函数(它不知道它只是处理包装的数字),然后立即再次打开结果。您不会对 SumProductAny 等值执行任何其他操作,因此您也不应该需要 Enum 实例。

可能需要它的唯一原因是函数是否具有约束(Monoid a, Enum a) => ...。但这是一个不太可能的组合 - Monoid 是一个通用的、高级的“代数”类,而 Enum 是一个相当低级的、特定的、集合类。如果您需要Enum,则意味着您将或多或少地处理一系列Int,并将您自己的含义归因于“零元素”和“元素组合” ”,那么为什么还需要 Monoid

但是如果您发现自己处于这种情况,您可以在本地定义一个新类型并为其提供您需要的实例。在某些时候,这种临时方法比为类型约束的每种可能的组合预先定义标准实例更有效,而在大多数情况下,没有人需要这种方法。

关于haskell - 为什么 Sum 和 Product 没有 Enum 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43065872/

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