我对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类型吗?我不知道我做错了什么,但我有一些基本的算术运算。
问题是您在Fraction
数据类型中没有使用a
或b
,也许您应该使用
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)
,所以您会看到一个错误。