diff --git a/philharvey+idris/fizzbuzz.ibc b/philharvey+idris/fizzbuzz.ibc new file mode 100644 index 0000000..cc97452 Binary files /dev/null and b/philharvey+idris/fizzbuzz.ibc differ diff --git a/philharvey+idris/fizzbuzz.idr b/philharvey+idris/fizzbuzz.idr index 3b4ffc3..25532fa 100644 --- a/philharvey+idris/fizzbuzz.idr +++ b/philharvey+idris/fizzbuzz.idr @@ -1,18 +1,15 @@ module Main -isFizz : Nat -> Bool -isFizz n = modNat n 3 == 0 +mapToFizzBuzz : Nat -> String +mapToFizzBuzz n = if isFizz n && isBuzz n then "FizzBuzz" else + if isFizz n then "Fizz" else + if isBuzz n then "Buzz" else show n + where isFizz n = modNat n 3 == 0 + isBuzz n = modNat n 5 == 0 -isBuzz : Nat -> Bool -isBuzz n = modNat n 5 == 0 - -isFizzBuzz : Nat -> Bool -isFizzBuzz n = modNat n 15 == 0 - -fizzbuzz : String -> Nat -> String -fizzbuzz s n = if isFizzBuzz n then s ++ "Fizz Buzz, " else - (if isFizz n then s ++ "Fizz, " else - (if isBuzz n then s ++ "Buzz, " else s ++ show n ++ ", ")) +reduceFizzBuzz : String -> Nat -> String +reduceFizzBuzz s n = s ++ mapToFizzBuzz n ++ "\n" main : IO () -main = putStrLn $ foldl fizzbuzz "" [1..100] +main = do + putStrLn $ foldl reduceFizzBuzz "" [1..100]