public static BinaryNumber Multiply(this BinaryNumber x, BinaryNumber y) { // For efficency always recur down the smaller number return x.LessThan(y).Accept(() => y.Accept(MultiplyFunc.Instance, x), () => x.Accept(MultiplyFunc.Instance, y)); }