     mutateMappingOrigin type.type, expression
     for c in type.constraints
       mutateMarkingOrigin c, expression
+  else if type.Types
+    mutateMappingOrigin t, expression for t in type.types
   else
     if type.TypeApp
       mutateMappingOrigin type.op, expression

  classParams = findFree classDeclaration.constraint
  freshingSub = mapMap ((kind) -> ctx.freshTypeVariable kind), classParams

  freshedClassType = substitute freshingSub, classDeclaration.constraint.types
  if isFailed mostGeneralUnifier freshedClassType, freshInstanceType.type
    malformed ctx, typeExpression, 'Type doesn\'t match class type'
    return null

  ctx.bindTypeVariableNames setToArray (findFree freshInstanceType)

  substitutionFail
    message: "#{message} #{(safePrintType first)}, #{(safePrintType second)}"
    conflicts: [first, second]
    # types: [t1, t2]

sortBasedOnOriginPosition = (t1, t2) ->
  if (originOf t1)?.start > (originOf t2)?.start
