【发布时间】:2016-10-17 02:55:46
【问题描述】:
我正在阅读 Haskell Programming from first principle 这本书,在其中一个建议的练习中,作者要求我们为 编写一个类 TooMany 的实例>(Num a, TooMany a) => (a, a) 如果两个数字之和大于 42,则应该进行比较。
这是我的代码:
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
instance (Num a, TooMany a) => TooMany(a, a) where
tooMany (a, b) = tooMany (a + b)
我认为我的代码是正确的,但我不知道如何编写表达式来测试它。对于 TooMany Int,我只是在 REPL 中写了 tooMany (10 :: Int),就是这样,我得到了一个布尔值的答案。
谁能给我一个提示?
【问题讨论】:
-
tooMany (10, 10)? (此外,在 GHCi 中尝试:t (10, 10)并仔细检查它是否适合您的代码。) -
不,这行不通。 i.imgur.com/3Z2bFLu.png 另外,:t (10, 10) 返回 :: (Num t1, Num t) => (t, t1)
-
@dfeuer 是正确的,因为需要
FlexibleInstances——尽管您可能已经启用了它,因为您至少能够定义实例。除此之外,确实有必要通过例如为元组赋予适当的特殊类型。(10 :: Int, 10 :: Int)。确实是一个相当奇怪的练习。
标签: haskell