public void SeqOrderingTest1()
        {
            var v13 = AbortableComputation <int> .Seed(NeverAbort, 13);

            var vStr = AbortableComputation <string> .Seed(NeverAbort, "test");

            var composition = v13.Seq(vStr);
            var val         = composition.Run();

            Assert.AreEqual("test", val.Value);
        }
        public void FmapOrderingTest()
        {
            var m = AbortableComputation <int>
                    .Seed(NeverAbort, 13)
                    .Fmap(x => x + 2)
                    .Fmap(x => x * 2);

            var val = m.Run();

            Assert.IsTrue(val.HasValue);
            Assert.AreEqual(2 * (13 + 2), val.Value);
        }
        public void SeqOrderingTest3()
        {
            var strBranchRun = false;

            var v13 = AbortableComputation <int> .Seed(NeverAbort, 13);

            var vStr = new AbortableComputation <string>(AlwaysAbort, () =>
            {
                strBranchRun = true;
                return("test");
            });

            var composition = v13.Seq(vStr);
            var val         = composition.Run();

            Assert.IsFalse(strBranchRun);
            Assert.IsTrue(val.IsNothing);
        }