================================================================================
types/ThisInTypeConstraint
================================================================================

res1: List<String(this == "one")>(this is List) = List("one")

res2: Mapping<String(this == "one"), String(this == "one")>(this is Mapping) = new Mapping { ["one"] = "one" }

res3: List<Set<String(this == "one")>(this is Set)>(this is List) = List(Set("one"), Set("one"))

res4: List<String(this == "one", (() -> this).apply() == "one", (let (x = this) x) == "one")> = List("one")

res5 = new Clazz {}

res6 = fun(res3)

class Clazz {
  res1: List<String(this == "one")>(this is List) = List("one")

  res2: Mapping<String(this == "one"), String(this == "one")>(this is Mapping) = new Mapping { ["one"] = "one" }

  res3: List<List<String(this == "one")>(this is List)>(this is List) = List(List("one"), List("one"))
}

function fun(x: List<Set<String(this == "one")>(this is Set)>(this is List)) = x

--------------------------------------------------------------------------------

(module
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (type
          (qualifiedIdentifier
            (identifier))
          (typeArgumentList
            (type
              (type
                (qualifiedIdentifier
                  (identifier)))
              (binaryExpr
                (thisExpr)
                (slStringLiteral)))))
        (isExpr
          (thisExpr)
          (type
            (qualifiedIdentifier
              (identifier))))))
    (methodCallExpr
      (identifier)
      (argumentList
        (slStringLiteral))))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (type
          (qualifiedIdentifier
            (identifier))
          (typeArgumentList
            (type
              (type
                (qualifiedIdentifier
                  (identifier)))
              (binaryExpr
                (thisExpr)
                (slStringLiteral)))
            (type
              (type
                (qualifiedIdentifier
                  (identifier)))
              (binaryExpr
                (thisExpr)
                (slStringLiteral)))))
        (isExpr
          (thisExpr)
          (type
            (qualifiedIdentifier
              (identifier))))))
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectEntry
          (slStringLiteral)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (type
          (qualifiedIdentifier
            (identifier))
          (typeArgumentList
            (type
              (type
                (qualifiedIdentifier
                  (identifier))
                (typeArgumentList
                  (type
                    (type
                      (qualifiedIdentifier
                        (identifier)))
                    (binaryExpr
                      (thisExpr)
                      (slStringLiteral)))))
              (isExpr
                (thisExpr)
                (type
                  (qualifiedIdentifier
                    (identifier)))))))
        (isExpr
          (thisExpr)
          (type
            (qualifiedIdentifier
              (identifier))))))
    (methodCallExpr
      (identifier)
      (argumentList
        (methodCallExpr
          (identifier)
          (argumentList
            (slStringLiteral)))
        (methodCallExpr
          (identifier)
          (argumentList
            (slStringLiteral))))))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier))
        (typeArgumentList
          (type
            (type
              (qualifiedIdentifier
                (identifier)))
            (binaryExpr
              (thisExpr)
              (slStringLiteral))
            (binaryExpr
              (methodCallExpr
                (parenthesizedExpr
                  (functionLiteral
                    (parameterList)
                    (thisExpr)))
                (identifier)
                (argumentList))
              (slStringLiteral))
            (binaryExpr
              (parenthesizedExpr
                (letExpr
                  (typedIdentifier
                    (identifier))
                  (thisExpr)
                  (variableExpr
                    (identifier))))
              (slStringLiteral))))))
    (methodCallExpr
      (identifier)
      (argumentList
        (slStringLiteral))))
  (classProperty
    (identifier)
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody)))
  (classProperty
    (identifier)
    (methodCallExpr
      (identifier)
      (argumentList
        (variableExpr
          (identifier)))))
  (clazz
    (identifier)
    (classBody
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (binaryExpr
                    (thisExpr)
                    (slStringLiteral)))))
            (isExpr
              (thisExpr)
              (type
                (qualifiedIdentifier
                  (identifier))))))
        (methodCallExpr
          (identifier)
          (argumentList
            (slStringLiteral))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (binaryExpr
                    (thisExpr)
                    (slStringLiteral)))
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier)))
                  (binaryExpr
                    (thisExpr)
                    (slStringLiteral)))))
            (isExpr
              (thisExpr)
              (type
                (qualifiedIdentifier
                  (identifier))))))
        (newExpr
          (type
            (qualifiedIdentifier
              (identifier)))
          (objectBody
            (objectEntry
              (slStringLiteral)
              (slStringLiteral)))))
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (type
              (qualifiedIdentifier
                (identifier))
              (typeArgumentList
                (type
                  (type
                    (qualifiedIdentifier
                      (identifier))
                    (typeArgumentList
                      (type
                        (type
                          (qualifiedIdentifier
                            (identifier)))
                        (binaryExpr
                          (thisExpr)
                          (slStringLiteral)))))
                  (isExpr
                    (thisExpr)
                    (type
                      (qualifiedIdentifier
                        (identifier)))))))
            (isExpr
              (thisExpr)
              (type
                (qualifiedIdentifier
                  (identifier))))))
        (methodCallExpr
          (identifier)
          (argumentList
            (methodCallExpr
              (identifier)
              (argumentList
                (slStringLiteral)))
            (methodCallExpr
              (identifier)
              (argumentList
                (slStringLiteral))))))))
  (classMethod
    (methodHeader
      (identifier)
      (parameterList
        (typedIdentifier
          (identifier)
          (typeAnnotation
            (type
              (type
                (qualifiedIdentifier
                  (identifier))
                (typeArgumentList
                  (type
                    (type
                      (qualifiedIdentifier
                        (identifier))
                      (typeArgumentList
                        (type
                          (type
                            (qualifiedIdentifier
                              (identifier)))
                          (binaryExpr
                            (thisExpr)
                            (slStringLiteral)))))
                    (isExpr
                      (thisExpr)
                      (type
                        (qualifiedIdentifier
                          (identifier)))))))
              (isExpr
                (thisExpr)
                (type
                  (qualifiedIdentifier
                    (identifier)))))))))
    (variableExpr
      (identifier))))
