在以下示例中:

> 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 => apartialSum坚持到此,直到知道a应该是什么。 GHCi仅保留1Integer

10-08 12:49