We could add `func (t *TypeInfo) New() interface{}` if that's important. I'm not happy about the current map / list / set implementation though. I think it's better to call a function recursively here and use reflection. This would also support a wider range of types (maps of sets, etc.)