f :: [Int] -> IO () f [] = return () f (x : xs) | fiz x && buz x = putStrLn "FizzBuzz" >> f xs | fiz x = putStrLn "Fizz" >> f xs | buz x = putStrLn "Buzz" >> f xs | otherwise = print x >> f xs where fiz a = a `mod` 3 == 0 buz a = a `mod` 5 == 0 main :: IO () main = getNum >>= main' where getNum = read <$> getLine :: IO Int main' n = f [1 .. n]