在以下示例中:
> let sum::Num a=> a->a->a; sum a b = a +b
> let partialSum = sum 1
> partialSum 2.0
3.0
在步骤
let partialSum = sum 1
中,似乎将a解释为Integer,但我想Haskell会延迟此时间,直到它可以弄清楚类型(以及要使用的类型类实例),直到构建整个表达式为止。我们可以解释这一点,因为最终结果是小数(3.0)
但是,此时
let partialSum = sum 1
GHCI必须将1
保留在内存中,我想知道它将其保留为什么吗? 最佳答案
但此时let partialSum = sum 1
GHCi必须在内存中保留1
可以,但是请记住,Haskell数字文字已重载。在这种情况下,1
将存储为fromInteger (1 :: Integer) :: Num a => a
。 partialSum
坚持到此,直到知道a
应该是什么。 GHCi仅保留1
和Integer
。