我刚刚使用 haskell 作为计算器,希望得到一些关于数字文字的类型实例的歧义的神秘错误消息。但没有得到。
例如在 ghci 中
> :t 1
1 :: Num p => p
> print 1
1
Run Code Online (Sandbox Code Playgroud)
我期望这样的代码print 1会破坏 xD,这似乎很疯狂。但这里 ghci 需要使用一些Show类的实现。也在1运行时以某种方式表示。使用什么表示形式以及为什么它不要求我指定类型?
类似的例子:
> 7*15+2
107
Run Code Online (Sandbox Code Playgroud)
该表达式具有通用Num a => a类型,但经过计算,因此需要选择某种类型。是整数吗?这种行为当然是有道理的,但它是如何运作的呢?
键入 eg print $ 5 ^ 5 ^ 5(在 Int 范围之外)会打印正确的数字,因此我猜测它是Integer而不是Int。
我没有找到任何通用Num a => Show a实例,而是像 Int 这样的类型的实现是特定于它们的。
我已经在版本8.8.4、7.10.3和9.0.2中使用 ghc 进行了测试。提前致谢!
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |