友人から、なぜ Haskell を学んでいるのかと聞かれました。Haskell の威力を実証するために、素数のリストを表示する小さなプログラムを作成しました。
main = do
putStr "Enter the number of prime numbers to display: "
number <- fmap read getLine :: IO Int
print . take number . filter isPrime $ [2..]
isPrime :: Integer -> Bool
isPrime n = not . any ((== 0) . mod n) $ [2..floor . sqrt . fromInteger $ n]
プログラムは、マイナーな異常を除けば期待どおりに動作します。ユーザーから入力番号を取得した後、プロンプトメッセージを出力し、次のような出力を生成します。
12
Enter the number of prime numbers to display: [2,3,5,7,11,13,17,19,23,29,31,37]
Haskell が IO アクションを正しく順序付けしないのはなぜですか? どこが間違っていますか?