User exceptions instead of monad-control