Пример #1
0
        static void Main()
        {
            var results = NonDetEffectHandler.Run(Foo());

            foreach (var result in results)
            {
                Console.WriteLine(result);
            }
        }
Пример #2
0
        public static List <TResult> Run <TResult>(Eff <TResult> eff)
        {
            switch (eff)
            {
            case ExceptionEff <TResult> setException:
                throw setException.Exception;

            case ResultEff <TResult> setResult:
                return(new List <TResult> {
                    setResult.Result
                });

            case DelayEff <TResult> delay:
                return(Run(delay.Continuation.MoveNext()));

            case AwaitEff <TResult> awaitEff:
                var handler = new NonDetEffectHandler <TResult>(awaitEff.Continuation);
                awaitEff.Awaiter.Accept(handler);
                return(handler.Results);

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