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 /
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, 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.

>