public static bool TryMatch <T>(this FST <T> fst, IEnumerable <char> input, out T value) { var outputType = fst.OutputType; var v = outputType.Zero(); var s = fst.Initial; foreach (var c in input) { if (fst.TryMove(s, c, out var to, out var o)) { s = to; v = outputType.Sum(v, o); }