   inferredType = freshInstance ctx, canonicalType
   ctx.extendSubstitution matchType inferredType.type, (substitute ctx.substitution, type).type
   reduceConstraints ctx, inferredType.constraints
+  console.log (printType (substitute ctx.substitution, inferredType))
   (substitute ctx.substitution, inferredType).constraints
 
 irReference = (name, type, scopeIndex) ->

    (map f lines))

  f (fn [x]
    x)

  expand (fn [x]
    gg
    gg (g {""}))
  """
  '3', 3


      ctx.addToDeferredNames {name: symbol, type: (mapOrigin type, atom)}
      nameTranslate ctx, atom, symbol, type
    else
      # log "deferring in rhs for #{symbol}", ctx._deferrableDefinition().name
      ctx.doDefer atom, symbol
      translation: deferredExpression()

