구구단 출력하기 (IO Action)

 
import Control.Monad import Text.Read -- 구구단 출력하는 프로그램 main :: IO () main = do putStr "몇 단을 출력할까요? (0=끝) " numLine <- getLine let num = readMaybe numLine :: Maybe Int case num of Just num -> do if num == 0 then return () else do printGugudan num main Nothing -> do putStrLn "잘못 입력하셨습니다!" main printGugudan :: Int -> IO () printGugudan n = do forM_ [1..9] (\i -> do putStrLn $ show n ++ " * " ++ show i ++ " = " ++ show (n * i))
  • IO 액션을 이용하면 마치 명령형 언어처럼 저걸 저렇게 쓸 수도 있다. IO 액션에서 호출할 수 있는 함수는 반드시 IO 액션을 내놓는 함수여야 하기 때문에 printGugugdan의 리턱 값이 IO ()여야 한다.
  • IO 액션 안에서 루프를 돌리려면 forM_ 을 쓰는 것이 편하다. 그냥 forM 을 쓰면 루프를 실행할 때마다 IO 액션이 넘어오는데, 결괏값이 중요하지 않다면 forM_을 쓰는 게 낫다.