instance Monad m => MonadFail (ExceptT String m) where fail = throwError but then I get overlapping instances