【发布时间】:2013-09-07 18:22:29
【问题描述】:
我正在学习一个 haskell 教程(向你学习一个很好的 haskell),我正在玩我根据书中的一个函数编写的这段代码。
reverseNum :: (Num a) => a -> a
reverseNum 123 = 321
reverseNum x = 0
ghci 告诉我它不能从 (Num a) 推导出 (Eq a)。
所以我把第一行改成这个
reverseNum :: (Integral a) => a -> a
它奏效了。这很奇怪,因为我认为要成为 Num 类型类的一部分,你也需要成为 Eq 的一部分。
我又尝试了一件事情来满足我的好奇心,并将前 2 行改成了这个
reverseNum :: (Floating a) => a -> a
reverseNum 1.0 = 0.1
它给了我同样的错误。
我知道您可以通过执行reverseNum :: (Num a, Eq a) ... 之类的操作来解决此问题,但我想知道为什么 Integral 是唯一可以推导出 Eq 的。
这是为什么呢?
附:我对haskell真的很陌生,所以...要温柔:)
【问题讨论】:
标签: haskell