12/04/13 08:18:23.98
全くなんの工夫もないが
$ cat fizzbuzz.hs
import Control.Monad (mapM_)
main = mapM_ (runFizzBuzz . gizz . buzz . fizz) [1, 3, 5, 7, 15, 21, 35, 105]
runFizzBuzz (n, s)
| s == "" = putStrLn $ show n
| otherwise = putStrLn $ show s
fizz n
| n `mod` 3 == 0 = (n, "Fizz")
| otherwise = (n, "")
buzz (n, s)
| n `mod` 5 == 0 = (n, showString s "Buzz")
| otherwise = (n, s)
gizz (n, s)
| n `mod` 7 == 0 = (n, showString s "Gizz")
| otherwise = (n, s)
$ runghc fizzbuzz.hs
1
"Fizz"
"Buzz"
"Gizz"
"FizzBuzz"
"FizzGizz"
"BuzzGizz"
"FizzBuzzGizz"