【发布时间】:2015-01-09 21:34:26
【问题描述】:
我最近写了一些 Haskell 代码,但它永远不会终止。在我仔细检查了我的代码后,问题归结为以下代码段
main :: IO ()
main = print $ let a = 10 in
let a = a in
a :: Int
我想这一定与 Haskell 的懒惰有关,因为相同的代码在 OCaml 中终止。但是,如果我改为编写以下代码
main :: IO ()
main = print $ let a = 10 in
let b = a in
b :: Int
代码终止完全没有问题。我无法理解原因,因为在原始代码中,两个 a 应该被视为两个不同的变量。我不知道为什么它们的命名与程序的语义有关。
【问题讨论】: