Пример #1
0
    public void TestWrap()
    {
        var s = PrinterMonad.Wrap("test");

        // note: AWKWARD
        // run test and watch debug prompt to see if working
        // should print 'test' three times
        s("input");
        s("test");
        s("a");
    }
Пример #2
0
    public void TestFlatten()
    {
        var r = new List <PrinterMonad <int> >();
        PrinterMonad <PrinterMonad <int> > p = r.Add;
        var q = p.Flatten();

        // note: AWKWARD
        // can't really verify what the printers are, just that they were made and inserted
        r.Count.AssertEquals(0);
        q(5);
        r.Count.AssertEquals(1);
        q(6);
        r.Count.AssertEquals(2);
    }
Пример #3
0
    public void TestTransform()
    {
        var r = new List <string>();
        PrinterMonad <string> p = r.Add;

        // note: BROKEN, goes backwards from string to int, instead of forward from int to string
        var q = p.Transform <int, string>(e => e + "");

        r.SequenceEqual(new string[0]).AssertTrue();
        q(5);
        r.SequenceEqual(new[] { "5" }).AssertTrue();
        q(8);
        r.SequenceEqual(new[] { "5", "8" }).AssertTrue();
    }
Пример #4
0
 /// <summary>
 /// Returns a printer that transforms values into a printer then prints that printer with the given printer printer.
 ///
 /// AWKWARD: The intermediate printer inherits awkwardness from Wrap's awkwardness.
 /// </summary>
 public static PrinterMonad <T> Flatten <T>(this PrinterMonad <PrinterMonad <T> > printerOfPrinter)
 {
     return(input => printerOfPrinter(Wrap(input)));
 }
Пример #5
0
 /// <summary>
 /// Returns a parser that uses the given parser but transforms its resulting value with the given transformation.
 ///
 /// BROKEN: The transformation goes backwards! The resulting printer expects values of type TIn instead of TOut.
 /// </summary>
 public static PrinterMonad <TIn> Transform <TIn, TOut>(this PrinterMonad <TOut> printer, Func <TIn, TOut> transformation)
 {
     return(input => printer(transformation(input)));
 }