Example #1
0
        public static IOrType <IFrontendType <IVerifiableType>, IError> ReturnsTypeOrErrors(this IOrType <IBox <IFrontendCodeElement>, IError> self)
        {
            if (self.Is2(out var v2))
            {
                return(OrType.Make <IFrontendType <IVerifiableType>, IError>(v2));
            }

            var intermittentLeft = self.Is1OrThrow().GetValue();

            if (intermittentLeft is not IReturn returns)
            {
                return(OrType.Make <IFrontendType <IVerifiableType>, IError>(Error.Other($"{intermittentLeft} should return")));
            }

            return(returns.Returns().TransformAndFlatten(x => x.UnwrapRefrence()));
        }
Example #2
0
        public IBuildIntention <ITypeOr> GetBuildIntention(IConversionContext context)
        {
            var(res, builder) = Tac.Model.Instantiated.TypeOr.Create();

            var localLeft  = left.GetValue();
            var localRight = right.GetValue();

            return(new BuildIntention <ITypeOr>(res
                                                , () =>
            {
                builder.Build(
                    localLeft.Is1OrThrow().SafeCastTo <IFrontendType <IVerifiableType>, IFrontendType <IVerifiableType> >().Convert(context),
                    localRight.Is1OrThrow().SafeCastTo <IFrontendType <IVerifiableType>, IFrontendType <IVerifiableType> >().Convert(context),
                    members.Is1OrThrow().Select(x => x.Convert(context)).ToArray(),
                    input.TransformInner(x => x.GetValue().Is1OrThrow().Convert(context)),
                    output.TransformInner(x => x.GetValue().Is1OrThrow().Convert(context))
                    );
            }));
        }