Opening an issue to track this experiment. I'm not sure if this is possible to do but it might reduce the complexity of the generated code, and possibly remove "type classes" from the code. The reason we have type classes is to construct arbitrary JObjects, but we can construct one and just cast them if they're all extension types!