AttaLambda is a small language built on pure, untyped lambda calculus, with readable syntax, exact rational numbers, and runtime type checks, along with a simple host module for letting the pure lambdas speak to the outside world.
The idea of AttaLambda is this: a usable Lisp-shaped language where all the meaningful computation is done in untyped lambda calculus. Logic, arithmetic, data structures, control flow, even the types — all untyped lambdas. A small, explicit Racket layer sits at the boundary to handle the outside world, plus some macros for syntactic sugar.
Some additional details:
* Rat, its number type, uses binary digit-list encodings instead of Church numerals, so numbers scale with their number of binary digits rather than their value
* errors are lambda-encoded values, not Racket exceptions, and propagate through the language like ordinary data
* the Racket host only performs irreducibly external operations; even things like HTTP parsing, routing, and response construction stay in the pure lambda world
* recursion uses lambda-calculus recursion: no loops or true self-reference, just the Y-combinator underneath
* automated purity checks catch accidental cheating, like native computation leaking into the pure parts
* syntax like multi-argument lambdas, let, cond, and list is just macro sugar that reduces to unary lambdas and application
A couple code examples: (short of print, every single thing here reduces to unary untyped lambdas)
Factorial:
#lang attalambda
(rec factorial n =
(cond
((eq n 0) 1)
(else (mult n (factorial (sub n 1))))))
(print (factorial 10))
Which prints:
3628800
Or an exact harmonic sum:
#lang attalambda
(print
(reduce add 0
(map (lambda (n)
(unwrap-ok (div 1 n)))
(range 1 8))))
Which prints exactly:
363/140
As far as I know, no programming language combines all these features: Michaelson-style type tags built from untyped lambdas, exact rationals backed by binary digit lists, errors as lambda values, and real-world programs where almost all computation stays inside the lambda core. None of those pieces are individually new, but I don't know of another language combining them this way.