2026-08-21
Lazy.hs
main :: IO ()
main = do
let xs = [1, 2, undefined, 4] :: [Int]
print (take 2 xs)
これは何を出力するでしょうか?なぜundefinedがあってもクラッシュしないのでしょうか?
答え
[1,2]。Haskellは遅延評価なので、take 2 xsはリストの先頭2つのconsセルしか評価を強制しません。インデックス2にあるundefinedには一切触れられないため、評価されることも、エラーになることもありません。