검색결과 리스트
글
IO Type
Programming/Haskell
2015. 5. 20. 10:18
IO
Introduction to IO
IO a
사이드 이펙트를 수행하고, 그 결과로 type a 의 value 를 리턴하는 abstract 타입을 고려할 수 있다.
statements 는 보통 사이드 이펙트를 통해 대부분 communicate 된다. I/O 모나드를 소개함으로써 하스켈에서 statement/action 의 개념을 소개한다. 그러나 이 개념 또한 expression 의 일환이라, 결합이 가능하다. (composition)
IO Char
어떤 사이드이펙트를 수행하고 결과로 some character 를 리턴
IO ()
이 imperative type 에서도 가장 imperative 한 것이 IO () side effect 만 수행함
getChar :: IO Char
getChar :: () -> Char -- () -> something means trying to simulate laziness
putChar :: Char -> IO ()
return :: a -> IO a -- 어떤것도 하지 않고 즉시 리턴
a :: IO (Char, Char)
a = do x <- getChar
getChar
y <- getChar
return (x,y)
standard input 으로 부터 3 문자를 읽어 첫번째, 세번째를 페어로 리턴
오른쪽에는 t 의 IO 가 위치하고 왼쪽에는 t 가 위치하여 두 타입이 다르므로, assign 연산자 대신 <- 를 사용하는 것.
getLine :: IO String
getLine = do x <- getChar
if x == '\n' then
return []
else
do xs <- getLine
return (x:xs)
이번엔 standard output 에 string 을 print 하는 IO 메서드
putStr :: String -> IO ()
putStr [] = return ()
putStr (x:xs) = do putChar x
pubStr xs
putStrLn :: String -> IO ()
putStrLn xs = do putStr xs
putChar '\n'
imperative code 나 I/O 코드를 다른 함수들과 사용할 수 있다는 데 그 강점이 있다. 특히 String 은 그 자체로 리스트이기때문에, 리스트에 사용되는 함수는 위와같은 방식으로의 활용도가 높다.
strlen :: IO ()
strlen = do putStr "Enter a string: "
xs <- getLine
putStr "The string has "
putStr (show (length xs))
putStrLn " characters"
pure code 를 작성하여 impure code 에 embeded 한 예라 할 수 있음.
'Programming > Haskell' 카테고리의 다른 글
Parser in Haskell (0) | 2015.05.18 |
---|---|
Parser 의 bind (0) | 2015.05.15 |