Flow
Flow is a unique programming language based on the dataflow paradigm.
It draws inspiration from Vue.js's reactivity system (opens in a new tab), Kotlin Flow (opens in a new tab), as well as Haskell's monads and arrows, HDL languages like Verilog (opens in a new tab), Nintendo Switch's Game Programming for Beginners (opens in a new tab), and the game Factorio (opens in a new tab).
Flow extracts the common concept of "flow" seen in these systems and represents it in a simple form.
Examples
Flow's program syntax is simple. Here are some examples to get a feel for Flow:
> 1 + 2 -> output
3
3
3.
> @a'0 -> trace -> + 1 -> @a
0
1
2
3.
> if (blink == 0) (then:-> 2 ->) (else:-> 3 ->) merge -> output
2
3
2
3.
> copy 2 (-> * 2 ->) (-> + 1 ->) pair -> output
(4, 3).
> [1, 2, 3] -> map -> * 2 -> unmap -> output
[2, 4, 6].
Installation
Flow is developed in Haskell and distributed as a WebAssembly binary, so you can try it directly in your browser.
To try Flow in your browser, visit:
https://playflow.vercel.app (opens in a new tab)
You can also run it locally using a runtime such as wasmtime (opens in a new tab). Download the latest Flow release from GitHub Releases (opens in a new tab).
Run it like this:
$ wasmtime flow-lang.wasm