Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

johnynek/bosatsu

A python-ish pure and total functional programming language

johnynek/bosatsu.json
{
"createdAt": "2017-10-19T02:48:28Z",
"defaultBranch": "main",
"description": "A python-ish pure and total functional programming language",
"fullName": "johnynek/bosatsu",
"homepage": "",
"language": "Scala",
"name": "bosatsu",
"pushedAt": "2025-11-25T23:32:09Z",
"stargazersCount": 229,
"topics": [
"functional-programming",
"language"
],
"updatedAt": "2025-11-24T19:28:59Z",
"url": "https://github.com/johnynek/bosatsu"
}

Codecov

Bosatsu (菩薩) is the transliteration in Japanese of the sanskrit bodhisattva. A bodhisattva is someone who can reach enlightenment but decides not to, to help others achieve that goal. — Wikipedia

Bosatsu is a simple, non-turing complete language designed for configuration, queries and scripting. It borrows from Python, Haskell, Dhall and Rust.

Please see the documentation site or try basic expressions using this in-browser Bosatsu compiler.

Here is a working Bosatsu program to solve the first Project Euler problem:

package Euler/One
# see:
# https://projecteuler.net/problem=1
# Find the sum of all the multiples of 3 or 5 below 1000.
operator == = eq_Int
operator % = mod_Int
def operator ||(x, y):
True if x else y
def keep(i):
(i % 3 == 0) || (i % 5 == 0)
def sum(as): as.foldl_List(0, add)
# here is the python version:
# >>> sum(i for i in xrange(1000) if keep_fn(i))
# 233168
#
# bosatsu version here
computed = sum([i for i in range(1000) if keep(i)])
test = Assertion(computed == 233168, "expected 233168")

Please feel free to file an issue to discuss making a change to Bosatsu or to ask a question about how Bosatsu might be useful for a use-case that is interesting to you.

Bosatsu is developed in Scala. We use sbt as the build system. To build bosatsu, run sbt cli/assembly and then the script ./bosatsuj should print help (see the documentation link above for more help). sbt test should run all the tests.

At the sbt prompt:

bench/jmh:run -i 3 -wi 3 -f1 -t1

or for a specific benchmark

bench/jmh:run -i 3 -wi 3 -f1 -t1 .*SomeBench.*