有没有办法(任何方式)在类型类中实现约束?
作为我正在谈论的示例,假设我想将 Group 实现为类型类。因此,如果存在三个函数,则类型将是一个组:
class Group a where
product :: a -> a -> a
inverse :: a -> a
identity :: a
但这些都不是任何功能,但它们必须通过一些约束相关联。例如:
product a identity = a
product a (inverse a) = identity
inverse identity = identity
ETC...
有没有办法在类的定义中强制执行这种约束,以便任何实例都会自动继承它?例如,假设我想实现 C2 组,定义为:
data C2 = E | C
instance Group C2 where
identity = E
inverse C = C
这两个定义唯一地确定了 C2(上面的约束定义了所有可能的操作 - 事实上,由于约束,C2 是唯一具有两个元素的可能组)。有没有办法使这项工作?
最佳答案
Is there a way to enforce this kind of constraint?
号码很多人一直在要求它,包括杰出的托尼霍尔,但目前还没有任何迹象。
这个问题将是 Haskell Prime 的一个很好的讨论主题。团体。如果有人提出了一个好的建议,很可能在那里找到。
附言这是一个重要的问题!
关于haskell - 有没有办法在 Haskell 的类型类中实现约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2253235/