Skip to content

The type system and built‐in functions

tim-hardcastle edited this page Dec 1, 2024 · 9 revisions

In this section of the manual we will introduce Pipefish's type system, and the built-in functions and operations that go with the built-in types.

You may find it a little different from what you are used to, because it represents an attempt to squeeze the most use out of a dynamic type system; so far as I know its approach is paralleled only by Julia. However, the type system is very simple, and almost entirely flat. There is no inheritance. There are, indeed, no objects: a Pipefish struct is just an immutable container for data. There are a number of interesting proposals for adding to the type system, but it will take more use of the language to see if any of these would be worth implementing. In the meantime the following pages are a complete summary:

Note on equality and comparison

The comparison operators == and != are automatically implemented for every Pipefish type except func and error.

All comparison in Pipefish is by-value: structs with identical fields are equal, lists with the same elements in the same order are equal, etc.

It is an error to compare to elements of different types. "walrus" == 42 gives an error and not false.

🧿 Pipefish

Clone this wiki locally