`Num` 的哪个实例与文字一起使用,例如在 `print 1` 中?
What instance of `Num` is used with literals e.g. in `print 1`?
我刚刚使用 haskell 作为计算器,希望得到一些关于数字文字类型实例歧义的神秘错误消息。但是得到了none.
例如在 ghci
> :t 1
1 :: Num p => p
> print 1
1
我期望像 print 1
这样的代码能够打破 xD,这似乎很疯狂。但是这里ghci需要用到Show
class的一些实现。 1
在运行时也以某种方式表示。使用什么表示,为什么不要求我指定类型?
类似例子:
> 7*15+2
107
表达式具有一般 Num a => a
类型,但经过计算,因此需要选择某种类型。是整数吗?这种行为当然是有道理的,但它是如何工作的?
输入例如print $ 5 ^ 5 ^ 5
(超出 Int 范围)打印出正确的数字,所以我猜它是 Integer 而不是 Int.
我还没有找到任何通用的 Num a => Show a
实例,而是像 Int 这样的类型的实现是特定于它们的。
我已经在 8.8.4、7.10.3 和 9.0.2[ 版本中使用 ghc 进行了测试=40=]。提前致谢!
Haskell 有一个类型默认机制,以避免必须指定您键入的每个数字文字的类型。 Num
的默认类型是 Integer
,而 Fractional
(带小数点的文字)是 Double
。您可以使用顶级默认声明更改这些默认值。 This 文章解释了默认规则
The expression has general Num a => a
type but is calculated and for that some type needs to be chosen. Is it Integer
? This behaviour of course makes sense but how does it work?
Haskell 与 type defaulting 一起使用,Num a => a
类型的默认值确实是 Integer
。由于 Integer
也是 Show
类型类的成员,因此它仍将使用 Integer
并且 print $ 5 ^ 5 ^ 5
因此确实会使用 Show
的 Integer
实例=] 打印值。
默认默认为(Integer, Double)
。更多信息 in the Report. You may also want to read about ExtendedDefaultRules
;值得注意的是,这在 ghci 中是默认打开的。
我刚刚使用 haskell 作为计算器,希望得到一些关于数字文字类型实例歧义的神秘错误消息。但是得到了none.
例如在 ghci
> :t 1
1 :: Num p => p
> print 1
1
我期望像 print 1
这样的代码能够打破 xD,这似乎很疯狂。但是这里ghci需要用到Show
class的一些实现。 1
在运行时也以某种方式表示。使用什么表示,为什么不要求我指定类型?
类似例子:
> 7*15+2
107
表达式具有一般 Num a => a
类型,但经过计算,因此需要选择某种类型。是整数吗?这种行为当然是有道理的,但它是如何工作的?
输入例如print $ 5 ^ 5 ^ 5
(超出 Int 范围)打印出正确的数字,所以我猜它是 Integer 而不是 Int.
我还没有找到任何通用的 Num a => Show a
实例,而是像 Int 这样的类型的实现是特定于它们的。
我已经在 8.8.4、7.10.3 和 9.0.2[ 版本中使用 ghc 进行了测试=40=]。提前致谢!
Haskell 有一个类型默认机制,以避免必须指定您键入的每个数字文字的类型。 Num
的默认类型是 Integer
,而 Fractional
(带小数点的文字)是 Double
。您可以使用顶级默认声明更改这些默认值。 This 文章解释了默认规则
The expression has general
Num a => a
type but is calculated and for that some type needs to be chosen. Is itInteger
? This behaviour of course makes sense but how does it work?
Haskell 与 type defaulting 一起使用,Num a => a
类型的默认值确实是 Integer
。由于 Integer
也是 Show
类型类的成员,因此它仍将使用 Integer
并且 print $ 5 ^ 5 ^ 5
因此确实会使用 Show
的 Integer
实例=] 打印值。
默认默认为(Integer, Double)
。更多信息 in the Report. You may also want to read about ExtendedDefaultRules
;值得注意的是,这在 ghci 中是默认打开的。