Perhaps I don't quite get how this works, but when I :set -fbreak-on-exception in GHCi, I get an exception using readFile. It reads the entire file and then throws what appears to be an EOF exception.
Prelude> readFile "blah.txt"
"blah\nblah\nblah\nStopped at <exception thrown>
_exception ::
e = GHC.Exception.SomeException (GHC.Exception.:DException _
(GHC.Show.:DShow ...) ....)
(GHC.IOBase.IOError Nothing GHC.IOBase.EOF ....)