Move error handling into EitherT