private static void Visit(this ICSharpPrintingVisitor visitor, BinaryCSharpPattern pattern)
        {
            var op = pattern.PatternType switch
            {
                CSharpPatternType.And => " and ",
                CSharpPatternType.Or => " or ",
                _ => throw ContractUtils.Unreachable,
            };

            visitor.ParenthesizedVisit(pattern, pattern.Left);
            visitor.Out(op);
            visitor.ParenthesizedVisit(pattern, pattern.Right);
        }
 private static void Visit(this ICSharpPrintingVisitor visitor, NotCSharpPattern pattern)
 {
     visitor.Out("not ");
     visitor.ParenthesizedVisit(pattern, pattern.Negated);
 }