在 Haskell 中,独立表达式3 + 5
表示fromInteger (3 :: Integer) + fromInteger (5 :: Integer)
。在 GHCi 中,它被评估为fromInteger 8
类型Num a => a
。很明显,Haskell 可以计算(3 :: Integer) + (5 :: Integer)
,但评估原始多态表达式似乎需要 形式的某种规则,而我在 Prelude 中没有看到这样的规则。在 GHCi 中fromInteger x + fromInteger y = fromInteger (x + y)
, 的评估究竟是如何完成的?3 + 5
默认设置在这里起作用吗?似乎没有,因为如果我default ()
在提示符下输入,则3 + 5
仍然计算正确,而例如,\(x :: Float) -> x^2
无法进行类型检查。如果我使用恢复默认设置default (Integer, Double)
,则\(x :: Float) -> x^2
类型检查将按预期进行。