A framework to do name analysis for programming languages.
Focus on this sort of scopes:
- new names can only be introduced by constructs like letand function arguments.
- a name can only be binded once(note that still work fine for reftype)
A language with this sort of scopes suffices all of the mutating semantics(e.g., ref by ML languages),
while keeping the scope in the most simple level.
As for this package, if a language's scopes suffice above features, it works, and also can be used for closure conversions.
The awareness of differences between scopes by let and scopes by functions is missing,
due to the differences are in fact produced by a concrete implementation(let can be implemented with either immediate lambda or name mangling/gensym).