为什么此函数似乎隐藏其嵌入式异常?

时间:2018-07-13 21:18:41

标签: haskell exception

在评论another question时,我发现参照透明性明显中断。在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

为什么不是第一个谷底? (以防万一,请使用GHC 8.2.2-目前我的计算机上尚未安装任何其他版本。)

1 个答案:

答案 0 :(得分:7)

看起来像是Trac #14002。如果您这样做:

> :set -fpedantic-bottoms

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

该错误报告声称,在不造成性能损失的情况下很难修复。