public override Task <int> Accept(IReservationsInstrHandler handler)
 {
     return(handler.Handle(this));
 }
        public static async Task <TResult> Run <TResult>(this ReservationsProgram <TResult> prg, IReservationsInstrHandler handler)
        {
            var result = default(TResult);
            var done   = false;

            while (!done)
            {
                switch (prg)
                {
                case Return <TResult> ret:
                    result = ret.Result;
                    done   = true;
                    break;

                case Delay <TResult> delay:
                    prg = delay.Func();
                    break;

                case Await <TResult> _await:
                    prg = await _await.Accept(handler);

                    break;

                default:
                    throw new NotSupportedException($"{prg.GetType().Name}");
                }
            }

            return(result);
        }
 public override Task <IReadOnlyCollection <Reservation> > Accept(IReservationsInstrHandler handler)
 {
     return(handler.Handle(this));
 }
 public abstract Task <ReservationsProgram <TResult> > Accept(IReservationsInstrHandler handler);