Just skimming, looks pretty cool.
Still don't like abbreviations as part of the syntax. Graham likes abbreviating symbols in lisp, but aside from some conventions (call/cc in Scheme) no one else does that, and for good reason. Why on earth did he rename cons "join" but then keep car and cdr? Oh, because cons is defined later as something that isn't cons. On that note, since threads are part of the language join doesn't mean what one would expect it to mean either. lit is cute, but I notice a lack of guarantees that serializing a function twice and reading it back will yield two functions that are id to each other. Either the definition of apply is misleading or it serves no purpose? In CL and Scheme it takes the arguments as a list, but here it looks like it takes them individually, and it's a lisp-1, so it seems like any use of apply could just be a function call. ... I'm stopping now. Kind of like arc, it looks like it was a fun hobby project.
It is like Jony Ive wrote this: (car cdr type sym nom rdb cls stat sys) (coin))) (aif (some [mem f _] prims) (if (udrop (cdr it) args) (sigerr 'overargs s r m) (with (a (car args) b (cadr args)) (eif v (case f id (id a b) join (join a b) car (car a) cdr (cdr a) type (type a) xar (xar a b) xdr (xdr a b) sym (sym a) nom (nom a) wrb (wrb a b) rdb (rdb a) ops (ops a b) cls (cls a) stat (stat a) coin (coin) sys (sys a)) (sigerr v s r m) (mev s (cons v r) m)))) (sigerr 'unknown-prim s r m))) I like the brevity in Arc. I don’t know why, but it works for me. (set prims '((id join xar xdr wrb ops)
(def applyprim (f args s r m)