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(seq("where", optional(layout($, $.sigDecl)))),
),
jsLitString: $ => seq("`",alias(/[^`]+/,$.jsStringFragment),"`"),
jsLitString: $ => seq("`", alias(/[^`]+/, $.jsStringFragment), "`"),
deriveDecl: $ => seq("derive", repeat1($.identifier)),
pfuncDecl: ($) => seq(
"pfunc",
@@ -148,10 +148,18 @@ module.exports = grammar({
$.number,
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: $ =>
seq(
"class",
seq(alias($.identifier, $.className), repeat($._atom)),
seq(alias($.identifier, $.className), optional($._telescope)),
"where",
layout($, $.sigDecl)
),
@@ -170,7 +178,7 @@ module.exports = grammar({
$.shortDataDecl,
$.classDecl,
$.instanceDecl,
// $.recordDecl,
$.recordDecl,
// $.exportDecl,
$.deriveDecl,
$.sigDecl,

View File

@@ -12,7 +12,7 @@
"∀" ; "forall"
"import"
"uses" "derive"
"class" "instance" ;"record" "constructor"
"class" "instance" "record" "constructor"
"if" "then" "else"
"|" "<-" "=>" "$" ":"
] @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": {
"type": "SEQ",
"members": [
@@ -1271,11 +1370,16 @@
"value": "className"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_atom"
"name": "_telescope"
},
{
"type": "BLANK"
}
]
}
]
},
@@ -1400,6 +1504,10 @@
"type": "SYMBOL",
"name": "instanceDecl"
},
{
"type": "SYMBOL",
"name": "recordDecl"
},
{
"type": "SYMBOL",
"name": "deriveDecl"

73
src/node-types.json generated
View File

@@ -61,7 +61,7 @@
"required": true,
"types": [
{
"type": "character",
"type": "binder",
"named": true
},
{
@@ -76,14 +76,6 @@
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "recUpdate",
"named": true
},
{
"type": "semi",
"named": true
@@ -95,14 +87,6 @@
{
"type": "start",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "typeExpr",
"named": true
}
]
}
@@ -511,6 +495,10 @@
"type": "ptypeDecl",
"named": true
},
{
"type": "recordDecl",
"named": true
},
{
"type": "semi",
"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",
"named": true,
@@ -881,6 +908,10 @@
"type": "conName",
"named": false
},
{
"type": "constructor",
"named": false
},
{
"type": "data",
"named": false
@@ -961,6 +992,14 @@
"type": "quantity",
"named": false
},
{
"type": "record",
"named": false
},
{
"type": "recordName",
"named": true
},
{
"type": "semi",
"named": true

36959
src/parser.c generated

File diff suppressed because it is too large Load Diff