Nickle supports first-class function values with full static scope. The visibility of a name is controlled by its scope, and by its relationship to its namespace. Nickle namespaces are similar to Java modules, except that they are purely syntactic rather than having anything to do (in principle or in current practice) with the filesystem. The closest notion is probably namespaces in C++. In brief, a namespace is opened by a namespace declaration. Each name declared in a namespace may have one of three possible visibilities:
Names in a namespace may be referenced in one of two ways. First, public and protected names may be accessed via an explicit namespace qualifier ::. Thus, the name Foo::bar refers to the name bar in the namespace Foo. Second, the public names in a namespace may be brought into unqualified scope using an import declaration. For some example uses of namespaces see Figure 3 below and the Appendix.