         throw new Error "Error when deferring #{name} #{e.message}"
       if _notEmpty retainedConstraints
         ctx.extendSubstitution substituionFail "#{name}'s context is too weak, missing #{listOf (map printType, retainedConstraints)}"
-        console.log "unfiied", map printType, unifiedType.constraints
-        console.log "checked", map printType, checked
-        console.log "not declared", (map printType, notDeclared)
-        # console.log "reduced checked", map printType, substituteList ctx.substitution, reduceConstraints ctx, checked
-        console.log name,
-          "declared", (map printType, (substituteList ctx.substitution, unifiedType.constraints))
-          "inferred", (map printType, (substituteList ctx.substitution, constraints))
-          "not declared", (map printType, (substituteList ctx.substitution, notDeclared))
-          "retaineed", (map printType, retainedConstraints)
-          
   else
     [deferredConstraints, retainedConstraints] = deferConstraints ctx,
       ctx.allBoundTypeVariables(),

      atom.label = 'name'
      id = (ctx.definitionId()) ? (ctx.declarationId symbol) ? ctx.freshId()
      type = toConstrained ctx.freshTypeVariable star
      ctx.bindTypeVariables [type.type.name]
      ctx.addToDefinedNames {name: symbol, id: id, type: type}
      type: type
      id: id

      (substituteList ctx.substitution, constraints)
    # Finalizing type again after possibly added substitution when defer constraints
    currentType = substitute ctx.substitution, type
    # log "assign type", name, (printType (addConstraints currentType, retainedConstraints)), (printType quantifyUnbound ctx, (addConstraints currentType, retainedConstraints))
    ctx.assignType name,
      if polymorphic
        quantifyUnbound ctx, (addConstraints currentType, retainedConstraints)
