
On Thursday 27 October 2011, 16:48:44, Rustom Mody wrote:
I have this from Peyton Jones awkward squad paper
getTwoChars :: IO (Char,Char) getTwoChars = do c1 <- getChar c2 <- getChar return (c1,c2)
Can someone explain what is happening here? *Main> getTwoChars ab ('a','b') *Main> getTwoChars a ('\n','a')
Hmm, here I get Prelude> let getTwoChars :: IO (Char, Char); getTwoChars = do { x <- getChar; y <- getChar; return (x,y); } Prelude> getTwoChars ab('a','b') Prelude> getTwoChars ac('a','c') Prelude> Since your result pair appears on a different line, it seems that your input stream is line buffered and you have to press <Return> to make the input available to getChar. Then the entered newline isn't removed by the first getTwoChars, so it becomes the first Char gotten by the second invocation of getTwoChars. What's your OS and ghc version?