gleam-knowledge-patch
Gleam Knowledge Patch
Covers Gleam 1.7–1.15 (2025-01-05 through 2026-03-16). Claude Opus 4.6 knows Gleam through v1.6.x including core language (types, pattern matching, pipes, use expressions, Result/Option, labelled arguments, generics, opaque types, externals/FFI), BEAM and JavaScript targets, and gleam build tool basics.
Index
| Topic | Reference | Key features |
|---|---|---|
| Debug & testing | references/debug-and-testing.md | echo keyword, echo labels, assert for tests, let assert messages |
| Bit arrays | references/bit-arrays.md | JS parity (unaligned, 16-bit float, unit, UTF-16/32), float shorthand, size expressions |
| JavaScript FFI | references/javascript-ffi.md | $-prefixed external API, BitArray FFI, @external on types, CommonJS |
| Type system & patterns | references/type-system.md | Record updates across type params, const record updates, string <> in guards |
| Build tool & project | references/build-tool.md | Git deps, gleam dev, dev/ dir, gleam deps outdated, formatter controls |
Quick Reference — New Keywords & Syntax
| Feature | Version | Syntax |
|---|---|---|
echo (debug print) |
1.9 | echo expr or expr |> echo |
echo with label |
1.12 | echo expr as "label" |
assert (test assertion) |
1.11 | assert expr == expected |
assert with message |
1.11 | assert expr as "message" |
let assert message |
1.7 | let assert Ok(x) = expr as "msg" |
| Variant deprecation | 1.7 | @deprecated("msg") on variant |
@external on types |
1.14 | @external(erlang, "mod", "type") on pub type |
| Record update type change | 1.7 | Named(..data, value: new_typed_value) |
| Record update in const | 1.14 | const dev = Config(..base, port: 4000) |
String <> in guards |
1.15 | case x { s if a <> b == s -> ... } |
| Bit array float literal | 1.10 | <<1.5>> (no :float needed) |
| Bit array size expressions | 1.12 | <<data:bytes-size(size / 8 - 1)>> |
| Trailing comma → multiline | 1.12 | ["a", "b",] forces multiline format |
| Git dependencies | 1.9 | pkg = { git = "url", ref = "..." } |
gleam dev |
1.11 | Runs dev/ directory code |
gleam deps outdated |
1.14 | Check for newer Hex versions |
Essential Patterns
Debug printing with echo (1.9+)
// Standalone — prints value + file:line to stderr
echo [1, 2, 3]
// In pipelines — passes value through
[1, 2, 3]
|> list.map(fn(x) { x + 1 })
|> echo
|> list.map(fn(x) { x * 2 })
// With label (1.12+)
echo config.port as "server port"
Test assertions with assert (1.11+)
pub fn hello_test() {
assert telecom.ring() == "Hello, Joe!"
}
// Custom message:
pub fn system_test() {
assert telecom.is_up(key, strict, 2025)
as "My internet must always be up!"
}
JavaScript FFI — External API (1.13+)
// src/person.gleam
pub type Person {
Teacher(name: String, subject: String)
Student(name: String)
}
// src/my_ffi.mjs
import { Person$Teacher, Person$Student, Person$isTeacher,
Person$Teacher$subject, Person$name } from "./person.mjs";
let teacher = Person$Teacher("Joe", "CS");
Person$isTeacher(teacher); // true
Person$Teacher$subject(teacher); // "CS"
Person$name(teacher); // "Joe" (shared field)
Project structure with dev/ (1.11+)
my_app/
├── src/ # Production code (gleam run)
├── test/ # Tests (gleam test)
└── dev/ # Development scripts (gleam dev)
The $PACKAGENAME_dev module's main function runs via gleam dev.
Git dependencies in gleam.toml (1.9+)
[dependencies]
gleam_stdlib = { git = "https://github.com/gleam-lang/stdlib.git", ref = "957b83b" }
Supports git/HTTP URLs with a tag, branch, or commit ref.
@external on type declarations (1.14+)
@external(erlang, "erlang", "map")
@external(javascript, "../dict.d.mts", "Dict")
pub type Dict(key, value)
Produces precise Erlang type specs and TypeScript declarations instead of any.
More from nevaberry/nevaberry-plugins
dioxus-knowledge-patch
Dioxus changes since training cutoff (latest: 0.7.4) — Signals replacing use_state, RSX macro overhaul, server functions, asset!() system, dx CLI, Element-as-Result. Load before working with Dioxus.
46rust-knowledge-patch
Rust changes since training cutoff (latest: 1.94.0) \u2014 Rust 2024 Edition, async closures, trait upcasting, new std APIs, cargo resolver v3. Load before working with Rust.
20postgresql-knowledge-patch
PostgreSQL changes since training cutoff (latest: 18.1) — JSON_TABLE, SQL/JSON functions, MERGE RETURNING, virtual generated columns, UUIDv7, temporal PRIMARY KEY. Load before working with PostgreSQL.
16bun-knowledge-patch
Bun changes since training cutoff (latest: 1.3.10) \u2014 S3 client, built-in SQL/Redis, route-based HTTP server, CSS bundler, V8 compatibility. Load before working with Bun.
14nextjs-knowledge-patch
Next.js changes since training cutoff (latest: 16.1) — proxy.ts, \"use cache\", Cache Components, navigation hooks, typed routes, auto PageProps, React 19.2. Load before working with Next.js.
14postgis-knowledge-patch
PostGIS changes since training cutoff (latest: 3.6.1) — SFCGAL CG_* rename, ST_CoverageClean, ST_AsRasterAgg, topology bigint IDs, viewport simplification, 3D SFCGAL ops. Load before working with PostGIS.
13