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())); }
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)) ); })); }