在评论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-目前我的计算机上尚未安装任何其他版本。)
答案 0 :(得分:7)
看起来像是Trac #14002。如果您这样做:
> :set -fpedantic-bottoms
或在文件中定义f
并将其加载到GHCi中,然后两个表达式均会导致异常。
该错误报告声称,在不造成性能损失的情况下很难修复。