未解决的重载-尝试为自己的类创建Int的实例

时间:2018-11-15 00:09:35

标签: haskell typeclass

我有一个预先实现一个功能的类(现在),我想通过实例使用它,我从Int开始,但没有用。 它可以编译,但是当我尝试用fac 3调用该函数时, 我收到以下错误:

未解决的重载 *类型:Fibo a => a * 表达式:事实3

class (Eq a, Ord a, Show a, Num a) => Fibo a where
    fac :: a -> a
    fac n
        | n == 0 = 1
        | otherwise  = n * fac (n-1)

instance Fibo Int where
    fac n = fac n

当使用新类型的Show进行显示时,我无法理解为什么它不能用于我的Int类。

newtype IN_0 = IN_0 Int
instance Show IN_0 where
    show (IN_0 n) = show n

至少我认为错误是在实例部分中,我认为我需要做的就是删除构造函数并替换名称... 缺少什么了吗,您能告诉我我表演的区别和为什么它不适用于我自己的班吗?

1 个答案:

答案 0 :(得分:0)

据我所知,存在两个问题。

首先,您需要编写fac (3 :: Int)以消除3的类型。这将使您摆脱类型错误。

第二,您需要摆脱实例定义中的行fac n = fac n。这导致未定义的方法。而是将实例定义保留为空会导致使用默认实例。