     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

    # newMapWith variable.name, "occurs check failed"
  else if not kindsEq (kind variable), (kind type)
    # newMapWith variable.name, "kinds don't match for #{variable.name} and #{safePrintType type}"
    typeFail "Kinds of types don't match: ", variable, type
  else
    variable.ref.val = type
    newSubstitution()

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

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