小编IMK*_*IMK的帖子

在Haskell中打印不大于10的整数的函数所必需的类型类约束?

我正在尝试在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必要?

对不起,如果问题太愚蠢,我只是想学习.

haskell types

1
推荐指数
1
解决办法
213
查看次数

标签 统计

haskell ×1

types ×1