Helios language/

Modules

Helios top-level statements can be placed in modules and can then be imported by other Helios sources. Modules can be made available during compile-time by including them in a list as the second argument of the Program constructor.

import

import statements in Helios are similar to Javascript/Typescript:

import { 
    ImportedName1 as NewName1,
    ImportedName2
} from MyModule

The imported names act as if the original statements were defined in the source where they are imported.

Note: currently every top-level statement is public and exported by default, including other import statements.

Namespace import

Entire modules can also be imported directly as a namespace.

import MyModule

...

MyModule::MyStruct{...}

Namespaces can be nested:

import MyModule

...

MyModule::MySubModule::MyStruct{...}

The import {...} from ... syntax can also be used to unwrap submodules:

import { MySubModule as RenamedSubModule } from MyModule

...

RenamedSubModule::MyStruct{...}

Webpack

When using the Webpack loader you must use relative paths instead of module names when importing:

import { 
    ImportedName1 as NewName1,
    ImportedName2
} from "<rel-path-to-module>.hl"

The Webpack loader currently doesn't support importing namespaces using relative paths (WiP).