我正在尝试在Haskell中编写一个函数,该函数接受一个整数并仅在小于或等于10时才打印它.
在ghci中,执行如下编程的函数:
sayMeUntilTen :: (Integral a, Show a) => a -> String
sayMeUntilTen x = if x <= 10 then show x else "Sorry, greater than 10"
作品.
但是,如果我不包含约束,则Show aghci会显示以下错误:
•无法从上下文中使用'show'推断出(显示a):
对类型签名进行积分a:sayMeUntilTen :: forall a.积分a => a - >字符串
可能的解决方法:将(显示一个)添加到类型签名的上下文中:sayMeUntilTen :: forall a.积分a => a - >字符串
我不明白为什么要添加Show a是必要的.是不是Integral像"子集" Show?寻找信息我发现这个网站:https://en.wikibooks.org/wiki/Haskell/Classes_and_types
它用这张图描述了Haskell中typeclases之间的继承关系:
它让我认为Show类型类约束已经被Integral一个隐含了,但显然我有一些误解.
谁能向我解释为什么有Show必要?
对不起,如果问题太愚蠢,我只是想学习.