effekt-lang / effekt-lang/effekt
Expand namespacing with additional features
- Dominant language
- Scala
- Stars
- 469
- Forks
- 41
- Avg merge
- 1d 16h
- Merged PRs (30d)
- 23
Description
PR #388 implements basic namespacing. In the future it would be great to have support for additional features. In particular,
- [ ] control exporting selectively using visibility modifiers. Technically this could be implemented by annotating bindings with the modifier
```
case class Bindings[F[_]](
terms: Map[String, Set[F[TermSymbol]]], // terms can be overloaded
types: Map[String, F[TypeSymbol]],
captures: Map[String, F[Capture]],
namespaces: Map[String, Bindings[F]]
)
enum Visibility[T] {
case Public(binding: T)
case Private(binding: T)
def binding: T
}
```
- [ ] separate include (that is,`include "foo/bar.effekt" as bar`) and import and
- [ ] allow more fine-grained imports, i.e., `import foo::bar::{ x, y }`, renaming imports etc.
- [ ] add `export foo` for reexporting, again potentially with renaming
- [ ] add a full project mode where all (specified) files are always processed so includes are not necessary. Such a project mode could also configure other flags to the Effekt compiler, as well as declare dependencies etc.
Look at https://gist.github.com/jiribenes/8195243f56a454d3465b06f02e8bb5a2?permalink_comment_id=4872857#gistcomment-4872857 for discussions on designs.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.