Modules and Packages
Complete guide to lisaaBox/lisaaShare/lisaaBring and priyoPackage APIs.
Theory
Modules and packages help you split code into reusable units. A module is your own file-based code unit (lisaaBox) that exports selected symbols (lisaaShare). A package is a pre-registered reusable utility object (for example math, decorators) imported through lisaaBring or accessed via priyoPackage. This separation makes large projects easier to organize and test.
Current module/package features
- Module declaration with
lisaaBox { ... } - Explicit exports with
lisaaShare - Built-in package import (
lisaaBring math,lisaaBring decorators) - Path import with alias and named imports
- Relative (
./,../) and project-root absolute (/...) resolution - Automatic fallback to
path.priyoandpath/index.priyo - Built-in package APIs via
priyoPackage.list/has/use
API Table
Module syntax APIs
| API | Syntax | Purpose |
|---|---|---|
| Module boundary | lisaaBox { ... } | Marks file as importable module |
| Export symbol | lisaaShare name | Exposes symbol to importers |
| Alias import | lisaaBring "./m.priyo": mod | Imports full module object under alias |
| Named import | lisaaBring "./m.priyo": [x, y: localY] | Imports selected exports |
Package runtime APIs
| API | Syntax | Purpose |
|---|---|---|
| List packages | priyoPackage.list() | Returns available built-in package names |
| Check package | priyoPackage.has("math") | Returns boolean |
| Load package | priyoPackage.use("math") | Returns package object |
| Direct import | lisaaBring math | Shortcut built-in package binding |
Example 1: Create and import a basic module (alias import)
Folder structure:
project/
college.priyo
main.priyocollege.priyo
lisaaBox {
lisaaTask square(x) {
priyoGiveBack x * x
}
priyoKeep campus = "NSEC"
lisaaShare square
lisaaShare campus
}main.priyo
monalisa {
lisaaBring "./college.priyo": college
priyoTell(college.campus)
priyoTell(college.square(5))
}Explanation:
college.priyois a module file, so it starts withlisaaBox.- Only shared symbols become importable.
- Alias
collegeholds exported members as properties.
Output:
NSEC
25Example 2: Named import with alias
Folder structure:
project/
college.priyo
main.priyomain.priyo
monalisa {
lisaaBring "./college.priyo": [campus, square: sq]
priyoTell(campus)
priyoTell(sq(6))
}Explanation:
- Imports only needed names.
square: sqrenames export locally for readability.
Output:
NSEC
36Example 3: Built-in package import
Folder structure:
project/
main.priyomain.priyo
monalisa {
lisaaBring math
lisaaBring decorators
priyoTell(math.cube(2))
priyoTell(decorators.upper("mona"))
}Explanation:
lisaaBring mathandlisaaBring decoratorsload built-ins from package registry.- No local file path needed.
Output:
8
MONAExample 4: priyoPackage methods (list, has, use)
Folder structure:
project/
main.priyomain.priyo
monalisa {
priyoTell(priyoPackage.list())
priyoTell(priyoPackage.has("math"))
priyoKeep pkg = priyoPackage.use("math")
priyoTell(pkg.add(10, 5))
}Explanation:
list()helps discover available built-ins.has(name)validates before loading.use(name)returns package object manually.
Output:
[math, decorators]
priyoTrue
15Example 5: Relative + absolute path resolution and index fallback
Folder structure:
project/
modules/
billing/
index.priyo
app/
main.priyomodules/billing/index.priyo
lisaaBox {
lisaaTask total(base, tax) {
priyoGiveBack base + tax
}
lisaaShare total
}app/main.priyo
monalisa {
lisaaBring "/modules/billing": billing
priyoTell(billing.total(100, 18))
}Explanation:
/modules/billingis project-root absolute import.- Resolver tries: direct path ->
.priyo->index.priyo.
Output:
118Edge Cases
| Case | What happens |
|---|---|
| Module file does not exist | module-not-found error with attempted candidate paths |
File does not start with lisaaBox | compile/runtime module-shape error |
Cyclic imports (A -> B -> A) | cycle guard error |
Unknown package in use/lisaaBring | package-not-found error |
| Export name not shared | imported symbol unavailable |
Debug tip
If import fails, check in order: file path, lisaaBox at file root, lisaaShare names, and cycle
presence.
Practice Questions
Concept Check
- When should you use alias import vs named import? 2. What is the difference between
lisaaBring mathandpriyoPackage.use("math")? 3. Why does module resolution tryindex.priyoas fallback?
Related Docs
Last updated on