           (substituteList ctx.substitution, matched.tea.constraints)
         # log "assign type", name, (printType currentType), retainedConstraints
         ctx.assignType name,
-          if ctx.isAtDeferrableDefinition()
+          if polymorphic
             quantifyUnbound ctx, (addConstraints currentType, retainedConstraints)
           else
             toForAll currentType


      ctx.newScope() # for variables defined inside pattern
      ctx.defineNonDeferrablePattern pattern
      {precs, assigns} = patternCompile ctx, pattern, subject

      # Compile the result, given current scope
      ctx.setAssignTo undefined


testNamed = (givenName) ->
  for [name, source, expression, result] in tuplize 4, tests when name is givenName
    return source + "\n" + "_ " + expression
  throw new Error "Test #{givenName} not found!"

logError = (message, error) ->
