E01020: invalid module name
What went wrong
The module names of the EK9 core, org.ek9.lang and org.ek9.math, are reserved. User code cannot define a module with either name.
Worked examples
Compilable examples demonstrating this error and the correct fix:
- ek9 -q 852 (Which module names are reserved in EK9?)
Reserved names
The rule is EXACT membership, not a prefix:
- org.ek9.lang - Core language types (String, Integer, List, etc.)
- org.ek9.math - Mathematical types and functions
Other names under org.ek9 (org.ek9.lang.custom, org.ek9.tools) are not reserved by this check - that namespace is where official libraries written in EK9 live.
How to fix it
Choose a different namespace for your module:
- Use your organisation's domain (com.mycompany, net.example)
- Use a project-specific prefix (myproject.utils)
- Any name other than org.ek9.lang and org.ek9.math passes this check
Common causes
- Attempting to extend built-in types by adding to reserved namespace
- Copy-paste from documentation examples without changing namespace
Note
This restriction is enforced at compile time and cannot be bypassed.
Examples
Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.
Fails with E01020: invalid module name
#!ek9 defines module org.ek9.lang defines function helper() <- rtn as String: "only the compiler's bootstrap may define this module"
Fixed: Name the module for your own organisation; other org.ek9 names are allowed too
#!ek9 defines module error.e01020.good defines function helper() <- rtn as String: "a module of your own"
Questions and answers
These Q&A entries show E01020 and its fix: