What if we insist that both branches of a branch have compatible types?
For one thing `[+] [* +] branch` leads to a circular term which, when
printed, goes into a loop: "int,int,int,...". Hmm...
Still needs the rest of the core functions and defs.
Could read defs from a file at compile-time?
Integer math? Boolean ops? Just type inference and maybe compiling?