Skip to content

Namespaces

Overview

A namespace N can contain declarations that are then accessed by writing N:: or using the namespace or declaration. For example:

Declaring some things in a namespace
//  A namespace to put all the names provided by a widget library
widgetlib: namespace = {
    widget: type = { /*...*/ }
    // ... more things ...
}

main: () = {
    w: widgetlib::widget = /*...*/;
}

using

A using statement brings names declared in another namespace into the current scope as if they had been declared in the current scope.

using a_namespace::a_name ; brings the single name a_name into scope.

using a_namespace::_ ; brings all the namespace's names into scope using the _ wildcard.

For example:

using statements
//  A namespace to put all the names provided by a widget library
widgetlib: namespace = {
    widget: type = { /*...*/ }
    // ... more things ...
}

main: () = {
    //  Explicit name qualification
    w: widgetlib::widget = /*...*/;

    {
        //  Using the specific name, no widgetlib:: qualification needed
        using widgetlib::widget;
        w2: widget = /*...*/;
        // ...
    }

    {
        //  Using the whole namespace, no widgetlib:: qualification needed
        using widgetlib::_;
        w3: widget = /*...*/;
        // ...
    }

    // ...
}