출처 : https://www.hackerrank.com/challenges/fp-solve-me-first/problem
두 정수를 입력받아서 그 합을 출력하세요.
A, B는 1~1000 사이의 정수
입력: 2 3
출력: 5
입력받기
getLine
을 사용하면 키보드로부터 한 줄의 텍스트를 입력받을 수 있다. 이렇게 입력받은 텍스트는 IO 모나드로 싸여진 IO [Char]
타입이 된다. 이를 read
함수로 읽어서 IO Int
로 만든다음, do 블럭 내에서 바인딩하여 더한 후 출력한다.
main = do
val1 <- fmap read getLine :: IO Int
val2 <- read <$> getLine :: IO Int -- <$>는 fmap의 축약이다.
let sum = val1 + val2
print sum
IO String -> IO Int
로 만들 기 위해서 read :: String -> A
함수를 쓰는데 모나드에 싸여있는 내부에 사상해야 해서 fmap
함수를 이용했다. fmap
은 연산자로는 <$>
로 대체하여 쓸 수 있다.
readLn
함수
한 줄을 읽어들여서 라인의 값을 read
하는 것으로 readLn
함수가 존재한다.
고급작성법
하스켈에 익숙한 프로그래머라면 이 문제는 다음과 같이 작성할 것이다. 지금은 뭔가 이해하기 어려울 수 있지만, 어떤 의미의 식인지 곧 알게 될 것이다.
main = (+) <$> readLn <*> readLn >>= print