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.