Skip to content

Imports and libraries

tim-hardcastle edited this page Dec 4, 2025 · 25 revisions

In the section we look at the way that imports and modules work in Pipefish.

Imports

Imports are introduced by the import headword.

A line in the import section can only have two forms: either simply a path to a library, expressed as a string:

import

"filepath/foo.pf"

In this case the functions in the library will be in the foo namespace, e.g. foo.qux.

Alternatively, it can be a pair consisting of a preferred namespace and the path:

import

foolib::"filepath/foo.pf" // Has namespace 'foolib'.
NULL::"lib/fmt.pf"        // Has no separate namespace.

Use of NULL as a namespace means that the imported file isn't put into a separate namespace.

Imports as modules

An imported script can just be a static library. However, if it has a var section then the variables will be initialized; and if the script has an init command (as discussed later in the manual), it will be executed.

Namespaces can be chained: if your script imports foo which imports bar which has a function zort, then your script can call foo.bar.zort.

Standard libraries

Producing the standard libraries is usually a matter of wrapping Pipefish functions around Go functions, and so can be done easily and even automatically; and the developers at Google have already tested, optimized, and documented the library functions for us. The Pipefish libraries have been given matching names: regexp, path/filepath, etc.

Notable differences are:

  • Any form of IO is of course a command rather than a function, and IO commands are given a rather standardized form looking like get <variable name> from <source> and post <value> to <destination>. This is used for example to get the time from the system clock, or to get data from a SQL database. The sql library is therefore very different from what you're used to.

  • The reflect library is entirely different, since Pipefish has a different type system, and since the type function already tells you the types of values. Instead, the reflect library tells you about the types themselves, allowing you to discover e.g. whether a given type is a clone, and if so what its parent is, etc.

This version of Pipefish comes with the libraries fmt, html, math, path, path/filepath, reflect, regexp, sql, strings, time, and unicode. These are imported with their bare name rather than a filepath.

The following pages are in this section:

🧿 Pipefish

Clone this wiki locally