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

时间:2015-03-25 20:04:12

标签: haskell

我对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类型吗?我不知道我做错了什么,但我有基本的算术运算正在运转。

1 个答案:

答案 0 :(得分:2)

问题是您没有使用a数据类型中的bFraction,也许您应该使用

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),因此您会看到错误。