I think it makes sense to add the base field to the definition of Ring. Essentially, I'm trying to incorporate the idea of vector space as well. Maybe that should be kept separate. EDIT: The idea here is indeed to define class (Ring m t, Traversable f, Zip f) => Vector m f t I.e. it is really just a constraint on a functor.