Meta types and dynamic typing

Just to clarify - does this mean there is no way to implement generic programming? Or is it OK for Verse types?

For example:

# Archetype parametric contract/wrapper
payloadbase(t:type) := class<abstract>():
    Get() : t
    Set(ValueIn : t) : void

# Example payload for an int value
payload_int := class(payloadbase(int)):
    var Value : int = -1
    Get<override>() : int = { return Value }
    Set<override>(ValueIn : int) : void = { set Value = ValueIn}

# Example payload for a struct
payload_struct := class(payloadbase(payload_class_data)):
    var Value : payload_class_data = payload_class_data{}
    Get<override>() : payload_class_data = { return Value }
    Set<override>(ValueIn : payload_class_data) : void = { set Value = ValueIn}

# Example struct
payload_class_data := struct:
    Val1 : int = 0
    Val2 : float = 0.0

…if one were to call Set on payload_int and/or payload_struct; then later on payloadbase, Get will just return the default struct values since it is erased during runtime? Also How about the int payload - not the case?

Although doesn’t the Event system rely on generics like this? Or is that different because they’re (a) “callables” (I.e. they simple follow a “Tell, Don’t Ask” principle?) or (b) Never cast to the base type (thus no erasure occurs)? Actually I can probably figure this out myself now, this might be a rubber duck situation…

Either way, good to see that deeper polymorphism is WIP though! Thanks to Tim for that background too (also in the “polymorphic quicksort” thread).