record syntax

This commit is contained in:
2026-03-07 17:45:21 -08:00
parent 4e2c67c12d
commit eaf020bb91
5 changed files with 18688 additions and 18478 deletions

View File

@@ -126,7 +126,7 @@ module.exports = grammar({
// optional doesn't seem to help, so we have an error at void // optional doesn't seem to help, so we have an error at void
optional(seq("where", optional(layout($, $.sigDecl)))), optional(seq("where", optional(layout($, $.sigDecl)))),
), ),
jsLitString: $ => seq("`",alias(/[^`]+/,$.jsStringFragment),"`"), jsLitString: $ => seq("`", alias(/[^`]+/, $.jsStringFragment), "`"),
deriveDecl: $ => seq("derive", repeat1($.identifier)), deriveDecl: $ => seq("derive", repeat1($.identifier)),
pfuncDecl: ($) => seq( pfuncDecl: ($) => seq(
"pfunc", "pfunc",
@@ -148,10 +148,18 @@ module.exports = grammar({
$.number, $.number,
repeat1(alias($.identifier, $.name)) repeat1(alias($.identifier, $.name))
), ),
_telescope: $ => choice($.identifier, $.binder),
recordDecl: $ =>
seq(
"record",
seq(alias($.identifier, $.recordName), optional($._telescope)),
"where",
layout($, choice(seq("constructor", $.identifier), $.sigDecl)),
),
classDecl: $ => classDecl: $ =>
seq( seq(
"class", "class",
seq(alias($.identifier, $.className), repeat($._atom)), seq(alias($.identifier, $.className), optional($._telescope)),
"where", "where",
layout($, $.sigDecl) layout($, $.sigDecl)
), ),
@@ -170,7 +178,7 @@ module.exports = grammar({
$.shortDataDecl, $.shortDataDecl,
$.classDecl, $.classDecl,
$.instanceDecl, $.instanceDecl,
// $.recordDecl, $.recordDecl,
// $.exportDecl, // $.exportDecl,
$.deriveDecl, $.deriveDecl,
$.sigDecl, $.sigDecl,

View File

@@ -12,7 +12,7 @@
"∀" ; "forall" "∀" ; "forall"
"import" "import"
"uses" "derive" "uses" "derive"
"class" "instance" ;"record" "constructor" "class" "instance" "record" "constructor"
"if" "then" "else" "if" "then" "else"
"|" "<-" "=>" "$" ":" "|" "<-" "=>" "$" ":"
] @keyword ] @keyword

114
src/grammar.json generated
View File

@@ -1251,6 +1251,105 @@
} }
] ]
}, },
"_telescope": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "binder"
}
]
},
"recordDecl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "record"
},
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier"
},
"named": true,
"value": "recordName"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_telescope"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": "where"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "start"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "semi"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "constructor"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "SYMBOL",
"name": "sigDecl"
}
]
}
]
}
},
{
"type": "SYMBOL",
"name": "end"
}
]
}
]
},
"classDecl": { "classDecl": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
@@ -1271,11 +1370,16 @@
"value": "className" "value": "className"
}, },
{ {
"type": "REPEAT", "type": "CHOICE",
"content": { "members": [
{
"type": "SYMBOL", "type": "SYMBOL",
"name": "_atom" "name": "_telescope"
},
{
"type": "BLANK"
} }
]
} }
] ]
}, },
@@ -1400,6 +1504,10 @@
"type": "SYMBOL", "type": "SYMBOL",
"name": "instanceDecl" "name": "instanceDecl"
}, },
{
"type": "SYMBOL",
"name": "recordDecl"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "deriveDecl" "name": "deriveDecl"

73
src/node-types.json generated
View File

@@ -61,7 +61,7 @@
"required": true, "required": true,
"types": [ "types": [
{ {
"type": "character", "type": "binder",
"named": true "named": true
}, },
{ {
@@ -76,14 +76,6 @@
"type": "identifier", "type": "identifier",
"named": true "named": true
}, },
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{ {
"type": "semi", "type": "semi",
"named": true "named": true
@@ -95,14 +87,6 @@
{ {
"type": "start", "type": "start",
"named": true "named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
} }
] ]
} }
@@ -511,6 +495,10 @@
"type": "ptypeDecl", "type": "ptypeDecl",
"named": true "named": true
}, },
{
"type": "recordDecl",
"named": true
},
{ {
"type": "semi", "type": "semi",
"named": true "named": true
@@ -617,6 +605,45 @@
] ]
} }
}, },
{
"type": "recordDecl",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "binder",
"named": true
},
{
"type": "end",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "recordName",
"named": true
},
{
"type": "semi",
"named": true
},
{
"type": "sigDecl",
"named": true
},
{
"type": "start",
"named": true
}
]
}
},
{ {
"type": "shortDataDecl", "type": "shortDataDecl",
"named": true, "named": true,
@@ -881,6 +908,10 @@
"type": "conName", "type": "conName",
"named": false "named": false
}, },
{
"type": "constructor",
"named": false
},
{ {
"type": "data", "type": "data",
"named": false "named": false
@@ -961,6 +992,14 @@
"type": "quantity", "type": "quantity",
"named": false "named": false
}, },
{
"type": "record",
"named": false
},
{
"type": "recordName",
"named": true
},
{ {
"type": "semi", "type": "semi",
"named": true "named": true

36959
src/parser.c generated

File diff suppressed because it is too large Load Diff