PriyoScriptPriyoScript
Modules

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.priyo and path/index.priyo
  • Built-in package APIs via priyoPackage.list/has/use

API Table

Module syntax APIs

APISyntaxPurpose
Module boundarylisaaBox { ... }Marks file as importable module
Export symbollisaaShare nameExposes symbol to importers
Alias importlisaaBring "./m.priyo": modImports full module object under alias
Named importlisaaBring "./m.priyo": [x, y: localY]Imports selected exports

Package runtime APIs

APISyntaxPurpose
List packagespriyoPackage.list()Returns available built-in package names
Check packagepriyoPackage.has("math")Returns boolean
Load packagepriyoPackage.use("math")Returns package object
Direct importlisaaBring mathShortcut built-in package binding

Example 1: Create and import a basic module (alias import)

Folder structure:

project/
  college.priyo
  main.priyo

college.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.priyo is a module file, so it starts with lisaaBox.
  • Only shared symbols become importable.
  • Alias college holds exported members as properties.

Output:

NSEC
25

Example 2: Named import with alias

Folder structure:

project/
  college.priyo
  main.priyo

main.priyo

monalisa {
  lisaaBring "./college.priyo": [campus, square: sq]
  priyoTell(campus)
  priyoTell(sq(6))
}

Explanation:

  • Imports only needed names.
  • square: sq renames export locally for readability.

Output:

NSEC
36

Example 3: Built-in package import

Folder structure:

project/
  main.priyo

main.priyo

monalisa {
  lisaaBring math
  lisaaBring decorators

  priyoTell(math.cube(2))
  priyoTell(decorators.upper("mona"))
}

Explanation:

  • lisaaBring math and lisaaBring decorators load built-ins from package registry.
  • No local file path needed.

Output:

8
MONA

Example 4: priyoPackage methods (list, has, use)

Folder structure:

project/
  main.priyo

main.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
15

Example 5: Relative + absolute path resolution and index fallback

Folder structure:

project/
  modules/
    billing/
      index.priyo
  app/
    main.priyo

modules/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/billing is project-root absolute import.
  • Resolver tries: direct path -> .priyo -> index.priyo.

Output:

118

Edge Cases

CaseWhat happens
Module file does not existmodule-not-found error with attempted candidate paths
File does not start with lisaaBoxcompile/runtime module-shape error
Cyclic imports (A -> B -> A)cycle guard error
Unknown package in use/lisaaBringpackage-not-found error
Export name not sharedimported 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

  1. When should you use alias import vs named import? 2. What is the difference between lisaaBring math and priyoPackage.use("math")? 3. Why does module resolution try index.priyo as fallback?

Last updated on

On this page