         ctx.addToDeferred {name: dep.name, type: dep.type, deps: [name]}
       ctx.addType name, new TempType type
     else
-      log "adding type for lhs #{name}"
+      log "adding type for lhs #{name}", currentType
       ctx.addArity name, [] unless ctx.arity name
-      ctx.addType name, quantify (findFree currentType), currentType
+      ctx.addType name, if ctx._nameExpression()
+        quantifyAll currentType
+      else
+        toForAll currentType
   # here I will create type schemes for all definitions
   # The problem is I don't know which are impricise, because the names are done inside the
   # pattern. I can use the context to know which types where added in the current assignment.
 
-
   # TODO: malformed "LHS\'s type doesn\'t match the RHS in assignment", pattern
+
   precs: precs ? []
   assigns: assigns ? []
 

      constrFn = """function #{identifier}(#{paramList}) {#{paramAssigns}};"""
      constrValue = if params
        """
        #{identifier}.create = λ(function(#{paramList}){
          return new #{identifier}(#{paramList});
        });"""
      else

  args = _arguments call

  compiledOperator = operatorCompile ctx, call
  log "compiled saturated", operator, call

  compiledArgs = termsCompile ctx, args

