in reply to @ 2016-004.549Zlooking at a function signature you do not know if an exception can be thrown
Which is, in practise, the case in GHC. Sure, it's all well and good to say "IO can always throw an exception", but in practise you do not expect this of many IO actions.