-
Notifications
You must be signed in to change notification settings - Fork 4
With and without
In Pipefish, all values are immutable. You cannot change the nth item of a list or struct, or add a key to a map, or change the value associated with an existing key. Instead, you can ask Pipefish for a copy of the list/map/struct with an element or elements changed. Let's demonstrate in the REPL with lists.
→ ["a", "b", "c", ["d", "e"]] with 1::"x"
[a, x, c, [d, e]]
→ ["a", "b", "c", ["d", "e"]] with 1::"x", 2::"y"
[a, x, y, [d, e]]
→
Or by using a list of indexes, you can copy-and-change an element of an element, etc:
→ ["a", "b", "c", ["d", "e"]] with [3, 1]::"z"
[a, b, c, [d, z]]
→ →
And the same works for keys and maps, and with labels and structs. E.g.
→ map("a"::[0, 1], "b"::[2, 3]) with ["b", 1]::42
map("a"::[0, 1], "b"::[2, 42])
→
The without operator for maps returns a copy of the map with the given key or keys removed.
→ map(1::"a", 2::"b", 3::"c") without 2
map (1::a, 3::c)
→ map(1::"a", 2::"b", 3::"c") without 1, 3
map (2::b)
→
No error is returned if the key is not in the map: Pipefish consistently treats deletion as an idempotent operation.
🧿 Pipefish is distributed under the MIT license. Please steal my code and ideas.
- Getting started
- Language basics
- The type system and built-in functions
- Functional Pipefish
- Encapsulation
- Imperative Pipefish
-
Imports and libraries
- The crypto/aes library
- The crypto/bcrypt library
- The crypto/rand library
- The crypto/rsa library
- The crypto/sha_256 library
- The crypto/sha_512 library
- The database/sql library
- The encoding/base_32 library
- The encoding/base_64 library
- The encoding/csv library
- The encoding/json library
- The files library
- The fmt library
- The html library
- The image library
- The image/bmp library
- The image/color library
- The image/jpeg library
- The image/png library
- The lists library
- The markdown library
- The math library
- The math/big library
- The math/cmplx library
- The math/rand library
- The net/http library
- The net/mail library
- The net/smtp library
- The net/url library
- The os/exec library
- The path library
- The path/filepath library
- The reflect library
- The regexp library
- The strconv library
- The strings library
- The terminal library
- The time library
- The unicode library
- Advanced Pipefish
- Developing in Pipefish
- Deployment
- Appendices