Exemplo n.º 1
0
        private Node ToFormal(ITypeSystem system, IEnvironment env, IList <IType> types, Node arg)
        {
            Func <Var, IType> typed =
                var =>
                IsAnnotation && !env.ContainsKey(var.Id) ? env[var.Id] = system.NewGeneric() : env[var.Id];
            var formal =
                IsAnnotation ?
                (
                    arg is Apply ?
                    Define((Var)arg.Args[0], Const(system.Infer(env, (Node)arg.Spec, types)))
                    :
                    arg is Var ? Define((Var)arg, Const(typed((Var)arg))) : arg
                )
                :
                arg is Var?Define((Var)arg, Const(typed((Var)arg))) : arg;

            return(formal);
        }