import pry.atoms, pry.stream; import std.range.primitives, std.conv, std.variant; alias S = SimpleStream!string; with(parsers!S) { auto digits = range!('0', '9').rep.map!(x => x.to!int); static assert(isParser!(typeof(digits))); auto parser = any(tk!'a', digits); S s = "10a"; S.Error err; Algebraic!(dchar, int) value; assert(parser.parse(s, value, err)); assert(value == 10); assert(parser.parse(s, value, err)); assert(value == cast(dchar)'a'); assert(s.empty); }
Try each of provided parsers until one succeeds.