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));
 }