Modules
Lilo language supports modules. A module starts with a module declaration, and contains definitions (much like a system):
module Util
def add(x: Float, y: Float) = x + y
pub def calc(x: Float) = add(x, x)
A module can only contain defs and types.
Those definitions which should be accessible from other modules should be parked as pub, which means "public".
To use a module, one needs to import it, e.g. import Util. The public definitions from Util are then available to be used, with qualified names, e.g.:
import Util
def foo(x: Float) = Util::calc(x) + 42
One can import a module qualified with an alias, for example:
import Util as U
def foo(x: Float) = U::calc(x) + 42
To use symbols without a qualifier, use the use keyword:
import Util use { calc }
def foo(x: Float) = calc(x) + 42