Example #1
0
    public void TestFlatten()
    {
        ParserMonad <ParserMonad <int> > p = text => {
            var first = text[0];
            if (first == 'a')
            {
                return(Tuple.Create <ParserMonad <int>, string>(
                           rest => Tuple.Create(int.Parse(rest.Substring(0, 5)), rest.Substring(5)),
                           text.Substring(1)));
            }
            return(Tuple.Create(ParserMonad.Wrap(-1), text.Substring(1)));
        };
        var q = p.Flatten();

        q("a00004x").AssertEquals(Tuple.Create(4, "x"));
        q("b00004x").AssertEquals(Tuple.Create(-1, "00004x"));
    }
Example #2
0
    public void TestWrap()
    {
        var s = ParserMonad.Wrap("test");

        s("whatever").AssertEquals(Tuple.Create("test", "whatever"));
    }