2019-09-12 10:33:56 -07:00
|
|
|
import Control.Monad.State
|
|
|
|
|
import Control.Monad.Trans
|
|
|
|
|
import Control.Monad.Writer
|
2016-12-05 22:15:40 +01:00
|
|
|
|
2019-09-12 10:33:56 -07:00
|
|
|
main = putStr $ execWriter $ mapM_ (flip execStateT True . fizzbuzz) [1..100]
|
2016-12-05 22:15:40 +01:00
|
|
|
|
2019-09-12 10:33:56 -07:00
|
|
|
fizzbuzz :: Int -> StateT Bool (Writer String) ()
|
|
|
|
|
fizzbuzz x = do
|
|
|
|
|
when (x `mod` 3 == 0) $ tell "Fizz" >> put False
|
|
|
|
|
when (x `mod` 5 == 0) $ tell "Buzz" >> put False
|
|
|
|
|
get >>= (flip when $ tell $ show x)
|
|
|
|
|
tell "\n"
|