         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(),

  """
  "(size (concat-suffix {1} (concat-map (fn [x] {{1}}) {1 2 3})))", 6

  # 'overloaded subterms'
  # """
  # #{concatTest}

  # concat-suffix (fn [suffix what]
  #   (fold join-suffix e what)
  #   join-suffix (fn [x joined]
  #     (concat {joined suffix x})))
  # """
  # "(size (concat-suffix {1} (concat-map (fn [x] {{1}}) {1 2 3})))", 6

  'recursive overloaded functions'
  """

      (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)
