하스켈의 IO

Posted 2008. 11. 29. 04:34

마소 4월호 박스 기사입니다.


스켈은 순수 함수형 언어이며 원칙적으로 사이드 이펙트가 없다. 여기서 사이드 이펙트는 프로그램 수행의 결과로 상태가 변화하는 경우를 일컫는다. 대표적인 사이드 이펙트는 IO로, 화면에 결과를 출력하거나 키보드로부터 입력을 받는 일을 말한다. 간단한 예로 putStr 함수는 문자열을 받아서 화면에 출력해주며 타입은 다음과 같다.

 

putStr :: String -> IO ()

putStr의 타입


putStr은 String을 인자로 받고 IO를 수행한 후에 ()를 리턴한다는 뜻이다. 또 다른 예로 getLine을 사용자에게 한 줄 입력을 받는 함수며 타입이 다음과 같다.


getLine :: IO String

getLine의 타입


getLine은 인자가 없고 IO를 수행 후에 String 타입을 리턴한다. do {}를 사용하면 이렇게 IO를 수행하는 함수를 통해 조금 더 복잡한 일을 순차적으로 수행할 수 있다. 앞서 소개한 두 함수를 조합해 사용자가 한 줄 입력을 받은 후에 그대로 보여주는 프로그램은 다음과 같다.


echo :: IO ()

echo = do { s <- getLine

                ; putStr s }

echo 함수