Por que esse código Haskell nunca termina?
Eu escrevi recentemente um código Haskell e ele nunca termina. Depois de examinar cuidadosamente meu código, o problema se resumiu ao seguinte pedaço de código
main :: IO ()
main = print $ let a = 10 in
let a = a in
a :: Int
Eu acho que isso deve ter algo a ver com a preguiça de Haskell, pois o mesmo código termina no OCaml. No entanto, se eu escrevesse o código a seguir
main :: IO ()
main = print $ let a = 10 in
let b = a in
b :: Int
o código não teria nenhum problema em terminar. Não consigo entender o motivo, pois no código original, os dois a devem ser considerados como duas variáveis diferentes. Não sei por que o nome deles tem algo a ver com a semântica do programa.