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 a verb · spread over Vec
> :double ::verb~(mul 2) | [10 20 30] * double
[20 40 60]|~| a verb with slots · @-effectful binding
> :@surround ::verb~(:pfx ::string | :sfx ::string | prepend pfx | append sfx)
| "world" | @surround "[" "]"
"[world]"|~| source → quote → pipeValue
> "10 | add 3" | parse | apply /
13What is qlang?
A pure expression language for transforming immutable values through pipelines. 69 built-in operands, five value types, two-track error model, verbs with checked slots, live REPL in the browser.
Pipeline composition
Thread values through chains of operands with |, distribute 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, apply runs it against a subject. The ring closes.
Verbs
A verb is a quote under ::verb whose leading declarations are its slots. Lexical scope, recursive self-reference, kinds checked at the call.
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.