fizzbuzz

とりあえずチュートリアル読みながらの今の時点でのもの。

module Main
where

import IO

fiz' n | n < 1 = Nothing
       | n > 100 = Nothing
       | 0 == (mod n 15) = Just "FizBuz"
       | 0 == (mod n  3) = Just "Fiz"
       | 0 == (mod n  5) = Just "Buz"
       | otherwise = Just $ show n

fiz 1 = ["1"]
fiz n = case (fiz' n) of
          Just x  -> fiz (n-1) ++ [x]


main=doimp
doimp = do
    putStr  "Enter:"
    line <- getLine
    yet <- evalu line
    if yet then
      doimp
    else
      return ()
    where
      evalu :: String -> IO Bool
      evalu l | l == "" = return False
              | (read l) < 1 = do putStrLn "Too low" ; return True
              | (read l) > 100 = do putStrLn "Too high" ; return True
              | otherwise = do putStrLn ( show $ fiz $ read l) ; return True