private void ResolveSignatureTypesInField(FieldDeclarationSyntax field)
 {
     var resolver = new ExpressionTypeResolver(field.File, diagnostics);
     field.Type.BeginFulfilling();
     var type = resolver.CheckAndEvaluateTypeExpression(field.TypeExpression);
     field.Type.Fulfill(type);
 }
        private FixedList<DataType> ResolveTypesInParameters(
             FunctionDeclarationSyntax function,
             ExpressionTypeResolver expressionResolver)
        {
            var types = new List<DataType>();
            foreach (var parameter in function.Parameters)
                switch (parameter)
                {
                    case NamedParameterSyntax namedParameter:
                    {
                        parameter.Type.BeginFulfilling();
                        var type =
                            expressionResolver.CheckAndEvaluateTypeExpression(namedParameter
                                .TypeExpression);
                        types.Add(parameter.Type.Fulfill(type));
                    }
                    break;
                    case SelfParameterSyntax _:
                        // Skip, we have already handled the self parameter
                        break;
                    case FieldParameterSyntax fieldParameter:
                        throw new NotImplementedException();
                    default:
                        throw NonExhaustiveMatchException.For(parameter);
                }

            return types.ToFixedList();
        }
        private static DataType ResolveReturnType(
            FunctionDeclarationSyntax function,
            ExpressionSyntax returnTypeExpression,
            ExpressionTypeResolver expressionResolver)
        {
            var returnType = returnTypeExpression != null
                ? expressionResolver.CheckAndEvaluateTypeExpression(returnTypeExpression)
                : DataType.Void;

            return function.ReturnType.Fulfill(returnType);
        }
 private static void ResolveTypesInGenericParameters(
     FixedList<GenericParameterSyntax> genericParameters,
      ExpressionTypeResolver expressionResolver)
 {
     foreach (var parameter in genericParameters)
     {
         parameter.Type.BeginFulfilling();
         var type = parameter.TypeExpression == null ?
             DataType.Type
             : expressionResolver.CheckAndEvaluateTypeExpression(parameter.TypeExpression);
         parameter.Type.Fulfill(type);
     }
 }