Ok... Seems to only happen inside emacs (inf-haskell mode) At a shell it is as expected: *Main> getTwoChars a ('a','\n') So I guess its an emacs (comint-mode derivative to inferior process) issue.