为什么这个函数似乎隐藏了它的嵌入式异常?

Dan*_*ner 12 haskell exception

在评论另一个问题时,我发现参考透明度明显中断.在ghci:

> f g h = g `seq` h `seq` \x -> g (h x)
> seq (f undefined id) ()
()
> seq (undefined `seq` id `seq` \x -> undefined (id x)) ()
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
  error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
  undefined, called at <interactive>:3:14 in interactive:Ghci9
Run Code Online (Sandbox Code Playgroud)

为什么不是第一个底部?(GHC 8.2.2,如果重要的话 - 我目前没有在这台机器上安装任何其他版本.)

K. *_*uhr 7

看起来这是Trac#14002.如果你这样做:

> :set -fpedantic-bottoms
Run Code Online (Sandbox Code Playgroud)

或者f在文件中定义并将其加载到GHCi中,然后这两个表达式都会导致异常.

该错误报告声称很难修复而不会导致性能下降.