为什么这段代码是错误的? > 1 ::积分

时间:2015-08-10 02:16:50

标签: haskell

我知道这很有效。

Preulde> 1::Int
1

但这不起作用。

Preude> 1::Integral

我想知道Int和Integral之间的区别。

1 个答案:

答案 0 :(得分:6)

Int是一种类型,Integral是一种类型。类型类用作类型变量的边界,它们不能直接用作类型。也许您打算使用1 :: Integer,这是实现Integral类型类的另一种标准类型。

如果你想要一个多态Integral,即可以用作IntInteger(或任何实现Integral的用户定义类型),你可以做let x = 1 :: Integral a => a之类的事情。请注意,此处Integral仅用于=>的左侧,以提供类型变量a的边界,a用作右侧的类型。另请注意,您无法在不提供具体类型的情况下实际打印x的值,因为您需要具体类型来选择要调用的show方法。