没有实例 (小数((分子、分母)->分数 a0 b0))



我对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数据类型中没有使用ab,也许您应该使用

data Fraction = Fraction (Numerator, Denominator)
instance Fractional Fraction where
    recip (Fraction (a, b)) = Fraction (b, a)

但这也需要一个Num实例:

instance Num Fraction where
    ...

基本上,这个错误的原因是因为您指定了ab必须是分数的,但由于ab没有在Fraction的构造函数中使用,编译器可以任意选择使用哪一个。它可以执行Fractional (Fraction Float Double)Fractional (Fraction Double Float)Fractional (Fraction (Fraction Double Double) Float),所以您会看到一个错误。

最新更新