(:=) and (:) are normal binding
(a+a $$ a: 1) == 2 (b $$ b: 3*a // a: 1+1) == 6 x $$ d // e <=> (x $$ d) $$ e
(<-) expands sequences and pattern matches
([x] $$ x<-0,1,2) == [0],[1],[2] ([x] $$ odd x<-0,1,2) == [1]
todo: better to explicitly zip or to use (x<-... :: y<-...) simultaneous def?
(::=) defines algebraic types
(Seq(Lit "a",Rep(Alt(Lit "b",Lit "c"))) $$ rx ::= Eps | Lit l | Seq(s,t) | Alt(p,q) | Rep(s))
/junk/