mirror of
https://github.com/HigherOrderCO/Kind.git
synced 2024-09-11 17:56:48 +03:00
Now, there are two local binders: let x = ... use x = ... The 'let' binder will create a local definition, type-check it, and assign a name to it. When compiled, it will create 'dup' nodes. The 'use' binder is just an alias. It will not bind a new variable, and, when compiled, will create inline copies. Also, for type-checking, it allows creating aliases that are definitionaly equal for the checker.
39 lines
839 B
Plaintext
39 lines
839 B
Plaintext
Kind.Term.parser.def
|
|
: (Parser.Guard Kind.PreTerm)
|
|
= (Parser.Guard.text
|
|
Kind.PreTerm
|
|
"use "
|
|
(Kind.Term.parser.bind
|
|
Unit
|
|
(Parser.text "use ")
|
|
λ_
|
|
(Kind.Term.parser.bind
|
|
String
|
|
Parser.name
|
|
λnam
|
|
(Kind.Term.parser.bind
|
|
Unit
|
|
(Parser.text "=")
|
|
λ_
|
|
(Kind.Term.parser.bind
|
|
Kind.PreTerm
|
|
Kind.Term.parser
|
|
λval
|
|
(Kind.Term.parser.bind
|
|
Kind.PreTerm
|
|
Kind.Term.parser
|
|
λbod
|
|
(Kind.Term.parser.pure
|
|
λscp
|
|
(Kind.def
|
|
nam
|
|
(val scp)
|
|
λx (bod (Kind.Scope.extend nam x scp))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
) |