Почему эта функция, похоже, скрывает встроенное исключение?
Комментируя другой вопрос, я обнаружил очевидный разрыв в ссылочной прозрачности. В 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, то оба выражения вызывают исключение.
Отчет об ошибке утверждает, что трудно исправить ситуацию без ущерба для производительности.