================================================================================
modules/typedModuleProperties1
================================================================================

import "library.pkl"

res1: String = "str"
res2: String(!isEmpty) = "str"
res3: library.Person = new library.Person {
  name = "Pigeon"
}
res4: library.Person = new Teacher {
  name = "Parrot"
  subjects = List("Fire making, Stone age")
}

class Teacher extends library.Person {
  subjects: List<String(!isEmpty)>
}

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

(module
  (importClause
    (stringConstant))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier))))
    (slStringLiteral))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (type
          (qualifiedIdentifier
            (identifier)))
        (unaryExpr
          (variableExpr
            (identifier)))))
    (slStringLiteral))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier)
          (identifier))))
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral)))))
  (classProperty
    (identifier)
    (typeAnnotation
      (type
        (qualifiedIdentifier
          (identifier)
          (identifier))))
    (newExpr
      (type
        (qualifiedIdentifier
          (identifier)))
      (objectBody
        (objectProperty
          (identifier)
          (slStringLiteral))
        (objectProperty
          (identifier)
          (methodCallExpr
            (identifier)
            (argumentList
              (slStringLiteral)))))))
  (clazz
    (identifier)
    (classExtendsClause
      (qualifiedIdentifier
        (identifier)
        (identifier)))
    (classBody
      (classProperty
        (identifier)
        (typeAnnotation
          (type
            (qualifiedIdentifier
              (identifier))
            (typeArgumentList
              (type
                (type
                  (qualifiedIdentifier
                    (identifier)))
                (unaryExpr
                  (variableExpr
                    (identifier)))))))))))
