| Answered by Sascha Lißon | |
You need to use replacement rules. In the tuples language is a replacement rule called namedTuple_assignableTo_namedTuple:
replacement rule namedTuple_assignableTo_namedTuple
applicable for concept = NamedTupleType as left <: concept = NamedTupleType as right
rule {
...
foreach (node<> lp : left.parameterType; node<> rp : right.parameterType) {
infer lp :<=: rp;
}
...
}
This rule says, that one tuple (left) is a subtype of another tuple (right), if each value in the left tuple is a subtype of the value in the right tuple at the same position. |