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.

questionAnswers(2)

yourAnswerToTheQuestion