Files
AILang/examples/test_22b2_constraint_declared_via_superclass.ail.json
T

54 lines
1.4 KiB
JSON

{
"schema": "ailang/v0",
"name": "test_22b2_constraint_declared_via_superclass",
"imports": [],
"defs": [
{
"kind": "class", "name": "TEq", "param": "a",
"methods": [{
"name": "teq",
"type": {
"k": "fn",
"params": [{ "k": "var", "name": "a" }, { "k": "var", "name": "a" }],
"ret": { "k": "con", "name": "Bool" }, "effects": []
}
}]
},
{
"kind": "class", "name": "TOrd", "param": "a",
"superclass": { "class": "TEq", "type": "a" },
"methods": [{
"name": "tlt",
"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": "TOrd", "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": "teq" },
"args": [{ "t": "var", "name": "x" }, { "t": "var", "name": "y" }]
}
}
]
}