void LensCompositionTet()
        {
            var moveTurtle = from x in TurtleX.ModS(x => x + 10)
                             from y in TurtleY.ModS(y => y + 10)
                             select Tuple.Create(x, y);

            var turtle1 = new Turtle("bob", new Position(x: 10, y: -2));

            var result = moveTurtle.Run(turtle1);

            Console.WriteLine(result);

            Assert.AreEqual(result.Item2.Item1, 20);
            Assert.AreEqual(result.Item2.Item2, 8);
        }
        public void LensReadTest()
        {
            var nameAndPosition = from name in TurtleName.GetS()
                                  from x in TurtleX.GetS()
                                  from y in TurtleY.GetS()
                                  select Tuple.Create(name, x, y);

            var turtle1 = new Turtle("bob", new Position(x: 10, y: -2));

            var result = nameAndPosition.Eval(turtle1);

            Console.WriteLine(result);

            Assert.AreEqual("bob", result.Item1);
            Assert.AreEqual(10, result.Item2);
            Assert.AreEqual(-2, result.Item3);
        }