В общем пришла идея для повышения скила написать свой яп, основные особенности которого будут:
- data class как в kotlin;
 - multimethod как в clojure;
 - синтаксис как в python;
 - модули как в python;
 - pre и post проверки как в clojure;
 - статическая типизация ближе к ml;
 - не lisp;
 - макросы на уровне ast;
 - threading/pipe оператор как в ml;
 - pattern matching как в scala;
 - null safety как в kotlin.
 
Пример кода:
from species import Bug
let Animal = class (name: String, age: Int):
    pre (name, age):
        name != "" and 0 <= age < 100
let sayName = method (animal: T) -> String:
    type(T)
sayName Animal (animal):
    pre (animal):
        animal.age > 10
    post (result):
        result |> length < 100
        
    "My name is ${animal.name}"
sayName Bug (bug):
    "Nope!"
let cow = Animal("Emma", 26)
sayName(cow) => "My name is Emma"
let bug = Bug("Jimmy")
sayName(bug) => "Nope!"
let test = method (x: Int, y: Int) -> Int:
    x > y
test true (x, y):
    x + y
test false (x, y):
    x - y
    
test(10, 20) => -10
test(20, 10) => 30
l
let fn = (a: Int, b: Int) -> Int:
    a * b
    
fn(2, 3) => 6
И я столкнулся с отсутствием нужных знаний. Кто что посоветует почитать и посмотреть по этой теме?














