Modules
Modules help organize code into reusable units.
Module Declaration
module my_module
# Module code hereImporting Modules
Basic Import
import std
import mathImport with Alias
import ai as ml
import chain as web3Import Specific Items
# Coming soon
import { add, subtract } from mathModule Structure
module calculator
fn add(a: i32, b: i32) -> i32 {
return a + b
}
fn subtract(a: i32, b: i32) -> i32 {
return a - b
}
fn multiply(a: i32, b: i32) -> i32 {
return a * b
}Using Imported Modules
import calculator
fn main() {
let result = calculator.add(5, 3)
print(result) # 8
}
main()Standard Library Modules
Core Module
import core
# Core utilities (coming soon)
let result = core.format("Hello, {}", "JOEL")AI Module
import ai
let tensor = ai.tensor([[1, 2], [3, 4]])
let result = ai.matmul(tensor, tensor)Chain Module
import chain
# Web3 utilities (coming soon)
let wallet = chain.create_wallet()UI Module
import ui
component App() {
# UI components
}Module Paths
Local Modules
# Import from same directory
import ./utils
import ./helpersRelative Imports
# Import from parent directory
import ../shared
import ../commonAbsolute Imports
# Import from project root
import /lib/math
import /utils/helpersModule Exports
module calculator
# Public functions (exported by default)
fn add(a: i32, b: i32) -> i32 {
return a + b
}
# Private function (coming soon)
private fn internal_helper() {
# Not accessible outside module
}Examples
Creating a Module
# math.joel
module math
fn add(a: i32, b: i32) -> i32 {
return a + b
}
fn subtract(a: i32, b: i32) -> i32 {
return a - b
}Using a Module
# main.joel
import math
fn main() {
print(math.add(10, 5)) # 15
print(math.subtract(10, 5)) # 5
}
main()Best Practices
- One module per file: Keep modules focused
- Clear naming: Use descriptive module names
- Organize by feature: Group related functionality
- Avoid circular imports: Keep dependencies acyclic
- Document exports: Comment public APIs