iter 22b.2.9: fix — superclass-walk tests, simplify class_superclasses map shape

This commit is contained in:
2026-05-09 18:59:15 +02:00
parent 7cff741632
commit b741a8ba05
4 changed files with 165 additions and 16 deletions
@@ -0,0 +1,53 @@
{
"schema": "ailang/v0",
"name": "test_22b2_constraint_declared_via_superclass",
"imports": [],
"defs": [
{
"kind": "class", "name": "Eq", "param": "a",
"methods": [{
"name": "eq",
"type": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" }, "effects": []
}
}]
},
{
"kind": "class", "name": "Ord", "param": "a",
"superclass": { "class": "Eq", "type": "a" },
"methods": [{
"name": "lt",
"type": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" }, "effects": []
}
}]
},
{
"kind": "fn",
"name": "uses_eq_via_ord",
"type": {
"k": "forall",
"vars": ["a"],
"constraints": [
{ "class": "Ord", "type": { "k": "var", "name": "a" } }
],
"body": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" },
"effects": []
}
},
"params": ["x", "y"],
"body": {
"t": "app",
"fn": { "t": "var", "name": "eq" },
"args": [{ "t": "var", "name": "x" }, { "t": "var", "name": "y" }]
}
}
]
}
@@ -0,0 +1,53 @@
{
"schema": "ailang/v0",
"name": "test_22b2_missing_constraint_subclass",
"imports": [],
"defs": [
{
"kind": "class", "name": "Eq", "param": "a",
"methods": [{
"name": "eq",
"type": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" }, "effects": []
}
}]
},
{
"kind": "class", "name": "Ord", "param": "a",
"superclass": { "class": "Eq", "type": "a" },
"methods": [{
"name": "lt",
"type": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" }, "effects": []
}
}]
},
{
"kind": "fn",
"name": "needs_ord_but_only_has_eq",
"type": {
"k": "forall",
"vars": ["a"],
"constraints": [
{ "class": "Eq", "type": { "k": "var", "name": "a" } }
],
"body": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" },
"effects": []
}
},
"params": ["x", "y"],
"body": {
"t": "app",
"fn": { "t": "var", "name": "lt" },
"args": [{ "t": "var", "name": "x" }, { "t": "var", "name": "y" }]
}
}
]
}