【发布时间】:2021-03-06 09:16:43
【问题描述】:
我正在为 MyNum 数据类型实现一个 instance Eq,它具有 Fractions 和 Mixed Numbers 作为数据构造函数(每个都有自己的参数)。
我还使用helper 函数将MyNum 转换为Rational。这应该有助于我在instance Eq 中进行比较时减少分数。
问题是我在创建instance Eq 时卡住了,我不确定是否还必须为MyNum 数据类型定义一个新的class Eq。 Eq 的一般用途是在使用辅助方法简化时比较两个分数是否相等。这是我目前所拥有的:
数据类型和构造函数:
data MyNum = Fraction {num :: Integer, denom :: Integer}
| Mixed {whole :: Integer, num:: Integer, denom :: Integer}
助手:
helper :: MyNum -> Rational
helper (Fraction num denom) = (fromIntegral num ) / (fromIntegral denom)
当前Eq:
instance (Eq n d) => Eq (MyNum n d) where
Fraction n d == Fraction n d = True
-- Mixed _ _ _ == Mixed _ _ _ = True
以上Eq代码抛出如下错误:
MyNum.hs:29:16: error: * Conflicting definitions for `d' Bound at: MyNum.hs:29:16 MyNum.hs:29:32 * In an equation for `==' | 29 | Fraction n d == Fraction n d = True | ^^^^^^^^^^^^^^^^^
【问题讨论】:
标签: haskell instance typeclass definition algebraic-data-types