x @ p $$ d <=> x $$ d @ p NB. floats to make defs work unicode subs . (size,sym) * sym ∗⃑ ⨵ - sym ⨩ & asym ⋀ ^ ⊻ | ∨ ' ⊙ x =?= y NB. test (also x <?= y?) "strings" c </ p /> a <=> (c @ True :: a @ False)p sections (op) (nm op) (op nm) (x $$ p<-s :: q<-t) p:q <- s \zip t (x $$ p<-s !! q<-t) p:q <- s \diag t (x $$ p<-s // q<-t) cartesian _[x] quote _{x} splice ⟨x⋮e⋮p⟩ ⟨x⋮p⟩ V%?(pre,post) V%!{pre:(,[node,prvs]) | seen:(%{node})}
operator precedence
to use an operator as an argument, wrap in parens: reduce (+)
to use a symbol as an operator, prefix with backslash: x \op y
everything is a binary operator; a traditional call foo(a,b,c) parses as:
<| ├─foo └─, ├─, │ ├─a │ └─b └─c
~~ <=> ==> $$ $@ // !! :: ::= ?= := <- @ |> <| /> </ <> == <= >= < > ' ^ | & !: : \\ ?? $ ; , |.. ,.. '' ^^ || && ~ -> - + % / * ** %! %* %? # ` .
right associative:
==> $@ <| -> // ** #
(|) normally distributes through every operator in sight, the exceptions being:
<=> ==> ::= := <> == <= >= < > !: : ~ ->
/junk/