https://github.com/ptol/oczor
Основная идея — сделать минимально простой статически типизированный язык и компилировать его в динамически типизированные языки (JavaScript, Lua, Ruby, Elisp)
В языке три основные фичи — анонимные функции, записи и Ad hoc полиморфизм
1. Анонимные функции вполне обычные
x y => x + y
2. На основе записей строится большинство конструкций
x = (foo = 1, bar = 2)
Кортежи, именованные функции и модули это тоже по сути записи
С помощью записей можно например определить тип (Maybe/Optional)
type Maybe a = none | just : a
3. Ad hoc полиморфизм — частично позаимствованный из Хаскеля
ffi eqInt : Int, Int => Bool
ffi eqString : String, String => Bool
class equal a : a => Bool
instance Int equal x y = eqInt x y
instance String equal x y = eqString x y
infix == 4 equal
x = 1 == 1
y = "foo" == "foo"
Talk is cheap. Show me the code.