EitherT instead of ErrorT to avoid an Error constraint