Transform values through pipelines
Expression language for composing immutable data transformations. Domain-agnostic. Pure. Runs in the browser.
|~| Vec → filter → count
> [1 2 3 4 5] | filter(gt(3)) | count
2 |~| bind name · spread over Vec
> let(:double, mul(2)) | [10 20 30] * double
[20 40 60] |~| parametric conduit · @-effectful binding
> let(:@surround, [:pfx, :sfx], prepend(pfx) | append(sfx))
| "world" | @surround("[", "]")
"[world]" |~| source → AST-Map → pipeValue
> "10 | add(3)" | parse | eval
13 What is qlang?
A pure expression language for transforming immutable values through pipelines. 69 built-in operands, five value types, two-track error model, parametric conduits, live REPL in the browser.
Pipeline composition
Thread values through chains of operands with |, distribute with *, merge with >>.
Immutable value types
Scalar, Vec, Map, Set, Error — all frozen. No mutation, no surprises.
Two-track error model
Success-track | deflects on errors, fail-track !| fires. Trail accumulates deflected steps as data.
Code as data
parse lifts source to an AST-Map, eval re-enters the evaluator. The ring closes.
Conduits
let binds named pipeline fragments with parameters. Lexical scope, recursive self-reference, zero-arity aliases.
Effect markers
@-prefixed identifiers carry side effects visibly. The runtime enforces propagation — no laundering.
Try it
Type a qlang expression and press Enter. The evaluator runs entirely in your browser.