static void Main()
 {
     SideEffect.Wrap(() => new [] { 4, 6, 2, 7, 8, 1 }.FromIEnumerable())
     .Bind(nums => SideEffect.PrintString("Original:")
           .Bind(_ => SideEffect.PrintNumbers(nums))
           .Bind(_ => SideEffect.PrintString("Reversed:"))
           .Bind(_ => SideEffect.PrintNumbers(nums.Reverse()))
           .Bind(_ => SideEffect.PrintString("Sorted:"))
           .Bind(_ => SideEffect.PrintNumbers(nums.QuickSort())))
     .Execute();
 }
        static void DivisionTest()
        {
            var x = 18.ToLazy();
            var y = 2.ToLazy();
            var z = 3.ToLazy();

            Optional.Value(x)
            .Bind(v => Divide(v, y))
            .Bind(v => Divide(v, z))
            .WithOptional(
                SideEffect.PrintString("Cannot divide by zero"),
                SideEffect.PrintNumber)
            .Execute();
        }