Namara

毎日コード。手助けなし。

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には一切触れられないため、評価されることも、エラーになることもありません。