Modules
Organize code with exports, imports, and module structure.
Export Declarations
export
Makes a function, class, or constant available to other modules.
// math.soli
// Private function (not exported)
fn validate_number(n: Int) -> Bool {
return n >= 0;
}
// Exported functions
export fn add(a: Int, b: Int) -> Int {
return a + b;
}
export fn subtract(a: Int, b: Int) -> Int {
return a - b;
}
export fn multiply(a: Int, b: Int) -> Int {
return a * b;
}
export fn divide(a: Int, b: Int) -> Float {
if (b == 0) {
panic("Division by zero");
}
return float(a) / float(b);
}
export fn factorial(n: Int) -> Int {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
Import Statements
import
Import functions and classes from other modules.
// Import all exports
import "./math.soli";
print(add(2, 3)); // 5
print(factorial(5)); // 120
// Named imports
import { add, multiply } from "./math.soli";
let sum = add(1, 2); // 3
let product = multiply(3, 4); // 12
// Aliased imports
import { add as sum, multiply as times } from "./math.soli";
let result = sum(10, 20); // 30
let doubled = times(5, 6); // 30
// Import everything with a namespace
import "./utils.soli" as utils;
let formatted = utils.format_date(DateTime.utc());
Project Structure
my-project/
├── soli.toml
├── src/
│ ├── main.soli
│ ├── config.soli
│ └── utils/
│ ├── mod.soli
│ ├── string.soli
│ ├── array.soli
│ └── datetime.soli
└── lib/
└── math/
├── mod.soli
├── basic.soli
└── advanced.soli
Package Configuration
soli.toml
[package]
name = "my-app"
version = "1.0.0"
description = "My awesome soli application"
main = "src/main.soli"
[dependencies]
# Local dependency
utils = { path = "./lib/utils" }
[dev-dependencies]
test-utils = { path = "./tests/test-utils" }
[scripts]
dev = "soli serve"
build = "soli build --release"
test = "soli test"
Use Keyword
use
Alternative syntax for importing (alias for import).
use "./math.soli";
use { add, multiply } from "./math.soli";
use "./utils.soli" as utils;