我对Haskell相当新,我似乎在我的代码中遇到了一个错误。当我试图从小数字覆盖recip时,我一直遇到这个错误。我的代码如下:
type Numerator = Int
type Denominator = Int
data Fraction a b = Fraction (Numerator,Denominator) deriving (Show, Eq)
instance (Fractional a, Fractional b) => Fractional (Fraction a b) where
recip (Fraction(a,b)) =
Fraction(b,a)
由于Numerator和Denominator引起的问题是Int类型吗?我不知道我做错了什么,但我有基本的算术运算正在运转。
答案 0 :(得分:2)
问题是您没有使用a
数据类型中的b
或Fraction
,也许您应该使用
data Fraction = Fraction (Numerator, Denominator)
instance Fractional Fraction where
recip (Fraction (a, b)) = Fraction (b, a)
但这也需要Num
个实例:
instance Num Fraction where
...
基本上,出现此错误的原因是您指定a
和b
必须是小数,但由于a
和b
未被使用在Fraction
的构造函数中,编译器可以任意选择使用哪一个。它可能会Fractional (Fraction Float Double)
,Fractional (Fraction Double Float)
或Fractional (Fraction (Fraction Double Double) Float)
,因此您会看到错误。