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