Я понимаю a `seq` b
как "будь строг на a и вычисляй b", поэтому undefined `seq` True
бросает и исключение.
Я играю с :sprint
и попробовал следующий тест в ghci:
Prelude> x = [True, undefined]
Prelude> :sprint x
x = _
Хорошо, потому что x
еще не был вычислен
Prelude> x `seq` True
True
Prelude> :sprint x
x = _
Почему x = _
в данный момент?Я думал, что seq
будет оценивать x
по крайней мере до _:_
(или, более вероятно, True:_
), но его значение все еще остается полностью скрытым.Нужно как-то проверить, не является ли x
не undefined
, поэтому ему нужно выполнить какую-то оценку, но почему бы не сохранить результат?
Я использую GHC 8.6.3