A friend of mine asked me why was I learning Haskell. To demonstrate the power of Haskell I wrote a small program which displayed a list of prime numbers:
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]
The program works as expected save a minor anomaly. It prints the prompt message after taking an input number from the user resulting in an output like:
12
Enter the number of prime numbers to display: [2,3,5,7,11,13,17,19,23,29,31,37]
Why is Haskell not sequencing the IO actions correctly? Where am I going wrong?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…