我有一个预先实现一个功能的类(现在),我想通过实例使用它,我从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
至少我认为错误是在实例部分中,我认为我需要做的就是删除构造函数并替换名称... 缺少什么了吗,您能告诉我我表演的区别和为什么它不适用于我自己的班吗?
答案 0 :(得分:0)
据我所知,存在两个问题。
首先,您需要编写fac (3 :: Int)
以消除3
的类型。这将使您摆脱类型错误。
第二,您需要摆脱实例定义中的行fac n = fac n
。这导致未定义的方法。而是将实例定义保留为空会导致使用默认实例。