That makes a lot of sense for small, local types and is how I’d do it in this case as well, but I think what they want here is being able to define “”“instances”“” outside of the type constructor, and the module type would act like an interface from OO languages, or a typeclass from Haskell.
Variant types are a direct correspondent of sum types from Haskell, so I assume if they’re using a typeclass, it’s because they want this kind of “exterior” implementation.