Arithmetic, min/max and the three bitwise combining operators take two operands or more now and fold left, which is what the examples were already writing. The first pair still goes through `binary`, so the rule about which side decides the type is unchanged for every call that was already legal, and each operand after it is checked against that type. min and max fold their own way: every step puts both sides in slots, the accumulated pick included, so three operands are two nested lets and each is still evaluated exactly once. Reusing the previous `if` as an operand of the next would have copied everything inside it. Three things stay at two operands, each for its own reason. A chain of remainders is not something anyone writes on purpose; a chain of shifts would pass two counts that are each legal for the width and still shift the value away entirely. And a single operand is refused rather than guessed: there is no unary minus in this language -- the prelude writes every negation as (- 0 n) -- and no reciprocal, so both say so and name the form to write instead.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%