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...