Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. {-# LANGUAGE LambdaCase #-}
  2. module Main where
  3.  
  4. import Control.Monad
  5. import System.IO
  6.  
  7. data NumberType = Normal Int
  8.                 | Fizz
  9.                 | Buzz
  10.                 | FizzBuzz
  11.  
  12. numberType :: Int -> NumberType
  13. numberType i = case (i `mod` 3 == 0, i `mod` 5 == 0) of
  14.   (True, False) -> Fizz
  15.   (False, True) -> Buzz
  16.   (True, True) -> FizzBuzz
  17.   _ -> Normal i
  18.  
  19. main :: IO ()
  20. main = do
  21.   putStrLn "FizzBuzz v. 1.0.0"
  22.   putStr "From: "
  23.   hFlush stdout
  24.   from <- getLine
  25.   putStr "To: "
  26.   hFlush stdout
  27.   to <- getLine
  28.   forM_ (map numberType [read from .. read to]) $ \case
  29.     Normal i -> putStrLn $ show i
  30.     Fizz -> putStrLn "Fizz"
  31.     Buzz -> putStrLn "Buzz"
  32.     FizzBuzz -> putStrLn "FizzBuzz"