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).