Почему эта функция, похоже, скрывает встроенное исключение?

Комментируя другой вопрос, я обнаружил очевидный разрыв в ссылочной прозрачности. В 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

Похоже, это TraС# 14002. Если вы выполните:

> :set -fpedantic-bottoms

или определить f в файле и загрузить его в GHCi, то оба выражения вызывают исключение.

Отчет об ошибке утверждает, что трудно исправить ситуацию без ущерба для производительности.