为什么这个代码使用阴影`let`绑定挂起?

Mat*_*ick 8 haskell scope let letrec

运行此代码:

j = let x = 4
    in let x = x * x
       in x
Run Code Online (Sandbox Code Playgroud)

在翻译中:

ghci> j
... no response ...
Run Code Online (Sandbox Code Playgroud)

挂起CPU利用率很低.为什么是这样?我期待j = 16.

Mat*_*ick 16

根据Haskell报告,第3.12节:

让表达式具有一般形式let {d1; ......; 在e中,引入一个嵌套的,词法范围的,相互递归的声明列表(在其他语言中通常称为letrec).声明的范围是表达式e和声明的右侧.

(强调我的)

所以在第二个let,其中x = x * x,所有xs都引用相同的绑定,没有一个引用外部x = 4绑定.