using System;
using System.Collections.Generic;
public class Pair {
public A _1 { get; private set; }
public B _2 { get; private set; }
public Pair(A _1, B _2) {
this._1 = _1;
this._2 = _2;
}
public override string ToString() {
return string.Format("({0}, {1})", _1, _2);
}
}
public class ParseResult {
public A Item { get; private set; }
public string Rest { get; private set; }
public ParseResult(A item, string rest) {
Item = item;
Rest = rest;
}
public override string ToString() {
return string.Format("(value = {0}, rest = {1})", Item, Rest);
}
}
public class Parser {
public Func> Target { get; set; }
public Parser(Func> target) {
Target = target;
}
public ParseResult Parse(string input) {
return Target(input);
}
public static Parser Make(Func> target) {
return new Parser(target);
}
public static implicit operator Parser