Я решил попробовать посмотреть, понимаю ли я как работает ленивость в ghci, в итоге у меня получилась следующая сессия:
Prelude> let x = (id True, id undefined)
Prelude> :sprint x
x = _
Prelude> let x = (True, id undefined)
Prelude> :sprint x
x = _
Prelude> let x = (True, undefined)
Prelude> :sprint x
x = (,) True _
Prelude> let x = (True, undefined::Int)
Prelude> :sprint x
x = (True,_)
Prelude> let x = (True, False)
Prelude> :sprint x
x = (True,False)
но я абсолютно не понимаю, почему я получаю такие результаты.. Может ли кто-нибудь помочь разобраться?