아래 코드를 알아먹기 힘들다길래


-- https://gall.dcinside.com/mgallery/board/view/?id=github&no=5703 n <- readLn :: IO Int f <- fmap (map (([a,b] -> (a,b)) . map (read :: String -> Int) . words)) (replicateM n getLine)


절차적으로 풀어봄


{-# LANGUAGE ScopedTypeVariables #-} import Control.Monad (replicateM) n :: Int <- readLn abs :: [(Int, Int)] <- replicateM n $ do line :: String <- getLine let [a, b] :: [String] = words line return (read a, read b) :: IO (Int, Int)


분량 문제로 하스켈러들은 축약의 유혹에 항상 휩싸이게 됨.

+ 다른 언어에서 신경쓰지 않는 totality 처리가 하스켈에서 세레모니처럼 느껴지게 됨.

  (여기선 똑같이 totality 처리를 하지 않음)


함수를 하나 빼면 읽기 조금 나을지도.


n :: Int <- readLn getInts :: IO [Int] = map read . words <$> getLine abs <- replicateM n $ do [a, b] <- getInts return (a, b)