a test-bed for writing a statically typed concatenative language
Find a file
2025-11-11 22:10:00 -03:00
examples fixes and renames and deletes 2025-11-11 22:10:00 -03:00
exe bytecode serialization 2025-11-11 19:26:14 -03:00
lib fixes and renames and deletes 2025-11-11 22:10:00 -03:00
test a little restructuring 2025-11-10 20:18:31 -03:00
util a little restructuring 2025-11-10 20:18:31 -03:00
vim g 2025-11-10 18:27:25 -03:00
.editorconfig bytecode serialization 2025-11-11 19:26:14 -03:00
.gitignore bytecode serialization 2025-11-11 19:26:14 -03:00
.ocamlformat initial (public) commit 2025-11-08 02:27:11 -03:00
dune-project initial (public) commit 2025-11-08 02:27:11 -03:00
justfile bytecode serialization 2025-11-11 19:26:14 -03:00
LICENSE add LICENCE 2025-11-10 15:20:22 -03:00
primitives.md rename string primitives 2025-11-11 20:36:17 -03:00
README.md fix typo 2025-11-11 13:17:31 -03:00

Growl

Growl is my test-bed for writing a statically typed concatenative language.

The upstream repository is located at https://git.rhzm.org/lobo/growl. Repositories in GitHub and, Codeberg are kept mirrored.

It currently features a type system and inference engine based on Robert Kleffner's "A Foundation for Typed Concatenative Languages" thesis.

Executing the interpreter can be done like so:

$ dune exec -- ./exe/main.exe run examples/uncons.grr
([2 3 4] some)

Without any arguments it defaults to reading from standard input.

Building

Install the dependencies first:

$ opam install cmdliner sexplib
$ opam install alcotest # to run tests

Then execute dune build or dune runtest to run the tests.


While it hasn't been implemented yet, the main thing I want to explore with Growl is what I call "latent execution", a technique that allows for a more flexible syntax while keeping the type system and execution semantics sound by using type information to defer and execute words when their dependencies are satisfied; for instance:

println if (1 + 2 = 3) {"True"} {"False"}

# Should be identical to:
1 2 + 3 = {"True"} {"False"} if println