module FizzBuzz where
main :: IO ()
main = do mapper fizzbuzz nums
putStrLn ""
mapper fizzbuzz2 nums
where mapper f = mapM_ $ putStrLn . f
nums = [1..15]
fizzbuzz :: (Integral a, Show a) => a -> [Char]
fizzbuzz n | n `mod` 3 == 0 && n `mod` 5 == 0 = "fizzbuzz"
| n `mod` 3 == 0 = "fizz"
| n `mod` 5 == 0 = "buzz"
| otherwise = show n
fizzbuzz2 :: (Show a, Integral a) => a -> [Char]
fizzbuzz2 n = (test 3 "Fizz" . test 5 "Buzz") id (show n)
where test d s x | n `mod` d == 0 = const (s ++ x "")
| otherwise = x