import Control.Monad (forM_) main :: IO () main = do let n = 15 forM_ [1..n] $ \i -> do putStrLn $ fizzbuzz i fizzbuzz :: Int -> String fizzbuzz n = fizzbuzz' <> mwhen (null fizzbuzz') (show n) where fizzbuzz' = mwhen (n `mod` 3 == 0) "Fizz" <> mwhen (n `mod` 5 == 0) "Buzz" mwhen :: Monoid m => Bool -> m -> m mwhen True = id mwhen False = const mempty