!!
custom types
=> |% +$ beast $%([%cat @] [%dog @] [%bird @]) -- =/ animal `beast`[%bird 3] ?+ -.animal 0 %cat 100 %dog 200 ==

?+ is a switch with a default.

glossary

=> sets the subject to its head, then evaluates its tail against it.

=>([a=1 b=2] b) is 2.

|% makes a core: a battery of named arms, each written ++ name.

reach an arm back out with =< or arm:core.

=<  a
|%
++  a  5
--

is 5.

^: turns a type into a factory gate that molds any noun to that type.

(^:(@ud) 5) is 5.

$% makes a head-tagged union: each case is a cell led by a @tas tag that picks it.

$%([%a p=@] [%b q=@]) is an %a cell or a %b cell.

$: makes a tuple mold, naming each face in a cell.

$:(x=@ y=@) is the mold [x=@ y=@].

=/ pins a named value (a face) into the subject for the lines below it.

name=value optionally declares the type.

=/(a 3 (add a a)) is 6.

^- casts a value to a named type: it checks the value fits and relabels it.

^-(@ 42) is 42.

irregular forms:

a leading backtick cast - the type in backticks, then the value - is ^-

:* makes a tuple of many elements, nesting to the right.

:*(1 2 3) is [1 2 3].

irregular forms:

[a b c d] is :*(a b c d)

?+ switches on a tagged union with a default branch for unlisted cases.

?+(& 0 %.y 1) is 1.