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.
16 lines
516 B
Plaintext
16 lines
516 B
Plaintext
Kind.load.name
|
|
: ∀(name: String) ∀(book: Kind.Book) (IO Kind.Book)
|
|
= λname λbook
|
|
(IO.bind
|
|
Kind.Book
|
|
Kind.Book
|
|
(Kind.load.code name)
|
|
λfile
|
|
use defs = (String.Map.to_list Kind.Term file)
|
|
use fold = (List.fold (Pair String Kind.Term) defs)
|
|
use set2 = λnam λval (String.Map.set Kind.Term nam val book)
|
|
use setP = λdef λbook (~def λx Kind.Book set2)
|
|
use book = (fold Kind.Book setP book)
|
|
use deps = (Kind.Book.get_refs file)
|
|
(Kind.load.dependencies deps book)
|
|
) |