private static void Main() { Parser <char> aParser = Parse.Char('A'); Console.WriteLine(aParser("ABC")); Console.WriteLine(aParser("ZBC")); Console.WriteLine(aParser(string.Empty)); Parser <char> bParser = Parse.Char('B'); var aAndBParser = aParser.AndThen(bParser); Console.WriteLine(aAndBParser("ABC")); Console.WriteLine(aAndBParser("ZBC")); Console.WriteLine(aAndBParser("AZC")); var aOrBParser = aParser.OrElse(bParser); Console.WriteLine(aOrBParser("AZZ")); Console.WriteLine(aOrBParser("BZZ")); Console.WriteLine(aOrBParser("CZZ")); Parser <char> cParser = Parse.Char('C'); var aAndBOrC = aParser.AndThen(bParser.OrElse(cParser)); Console.WriteLine(aAndBOrC("ABZ")); Console.WriteLine(aAndBOrC("ACZ")); Console.WriteLine(aAndBOrC("QBZ")); Console.WriteLine(aAndBOrC("AQZ")); var parseLowercase = Parse.AnyOf("abcdefghijklmnopqrstuvwxyz"); Console.WriteLine(parseLowercase("aBC")); Console.WriteLine(parseLowercase("ABC")); var parseDigit = Parse.AnyOf("0123456789"); var parseThreeDigits = parseDigit.AndThen(parseDigit).AndThen(parseDigit); Console.WriteLine(parseThreeDigits("135Z")); var threeDigitsStringParser = parseThreeDigits.Select(CharTupleToString); Console.WriteLine(threeDigitsStringParser("135Z")); var threeDigitsIntParser = threeDigitsStringParser.Select(int.Parse); Console.WriteLine(threeDigitsIntParser("135Z")); var parseThenAdd = Parse.Lift2((x, y) => x + y, threeDigitsIntParser, threeDigitsIntParser); Console.WriteLine(parseThenAdd("100456")); string CharTupleToString(((char c1, char c2)t1, char c3) p) { return(new String(new[] { p.t1.c1, p.t1.c2, p.c3 })); } }