Skip to content

Instantly share code, notes, and snippets.

@gustavofranke
Last active November 11, 2019 12:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gustavofranke/ae05845f2082c8d8f7ded8f25ae23b96 to your computer and use it in GitHub Desktop.
Save gustavofranke/ae05845f2082c8d8f7ded8f25ae23b96 to your computer and use it in GitHub Desktop.
module FizzBuzz where
data Foo = Fizz | Buzz | FizzBuzz | Neither Int
instance Show Foo where
show Fizz = "Fizz"
show Buzz = "Buzz"
show FizzBuzz = "FizzBuzz"
show (Neither int) = show int
multOf3 :: Int -> Bool
multOf3 n = n `mod` 3 == 0
multOf5 :: Int -> Bool
multOf5 n = n `mod` 5 == 0
multOf3And5 :: Int -> Bool
multOf3And5 n = (multOf3 n) && (multOf5 n)
mkFoo :: Int -> Foo
mkFoo int
| multOf3And5 int = FizzBuzz
| multOf5 int = Buzz
| multOf3 int = Fizz
| otherwise = Neither int
program :: [Foo]
program = map mkFoo [1..100]
main = mapM_ print program
-- sequence (map (\x -> putStrLn (show $ mkFoo x)) [1..100])
-- $ runhaskell FizzBuzz.hs
-- 1
-- 2
-- Fizz
-- 4
-- Buzz
-- Fizz
-- 7
-- 8
-- Fizz
-- Buzz
-- 11
-- Fizz
-- 13
-- 14
-- FizzBuzz
-- 16
-- 17
-- Fizz
-- 19
-- Buzz
-- Fizz
-- 22
-- 23
-- Fizz
-- Buzz
-- 26
-- Fizz
-- 28
-- 29
-- FizzBuzz
-- 31
-- 32
-- Fizz
-- 34
-- Buzz
-- Fizz
-- 37
-- 38
-- Fizz
-- Buzz
-- 41
-- Fizz
-- 43
-- 44
-- FizzBuzz
-- 46
-- 47
-- Fizz
-- 49
-- Buzz
-- Fizz
-- 52
-- 53
-- Fizz
-- Buzz
-- 56
-- Fizz
-- 58
-- 59
-- FizzBuzz
-- 61
-- 62
-- Fizz
-- 64
-- Buzz
-- Fizz
-- 67
-- 68
-- Fizz
-- Buzz
-- 71
-- Fizz
-- 73
-- 74
-- FizzBuzz
-- 76
-- 77
-- Fizz
-- 79
-- Buzz
-- Fizz
-- 82
-- 83
-- Fizz
-- Buzz
-- 86
-- Fizz
-- 88
-- 89
-- FizzBuzz
-- 91
-- 92
-- Fizz
-- 94
-- Buzz
-- Fizz
-- 97
-- 98
-- Fizz
-- Buzz
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment