Modules

In Sidef, a module is the declaration of a new namespace:

module Fibonacci {
    func nth(n) {
        n > 1 ? nth(n-2)+nth(n-1) : n
    }
}

say Fibonacci::nth(12)    # prints: 144

The default namespace name is main. Variables from other namespaces can be used inside a module by either importing them, or by specifying their full name which includes the namespace:

var foo = 42

module Bar {
    var baz = 99
    say main::foo   #=> 42
}

say Bar::baz        #=> 99

Importing an identifier in the current namespace, can be done using the syntax import namespace::identifier_name:

var foo = 42

module Bar {
    import main::foo
    var baz = 2*foo
}

import Bar::baz
say baz             #=> 84

Modules cannot be instantiated as objects, cannot be modified, and cannot be directly referred to by their name (like ModuleName) without a member name (like ModuleName::var_name). Therefore, they are for containing related code that doesn't need to be instantiated like a class.