==================
existence check
==================

yes = True if no? else False

---

(module
  (conditional_expression
    (assignment
      left: (pattern
        (identifier))
      right: (true))
    (existential
      object: (identifier))
    (false)))

==================
safe attribute access
==================

a = obj?.prop

---

(module
  (assignment
    left: (pattern
      (identifier))
    right: (existential
      object: (identifier)
      attribute: (identifier))))

==================
safe subscript
==================

a = obj?[0]

---

(module
  (assignment
    left: (pattern
      (identifier))
    right: (existential
      object: (identifier)
      subscript: (number))))

==================
safe call
==================

a = fn?()

---

(module
  (assignment
    left: (pattern
      (identifier))
    right: (existential
      object: (identifier)
      default: (tuple))))

==================
existential chain
==================

ans = a?.b?[1]?()

---

(module
  (assignment
    left: (pattern
      (identifier))
    right: (existential
      object: (existential
        object: (existential
          object: (identifier)
          attribute: (identifier))
        subscript: (number))
      default: (tuple))))

==================
default operator
==================

a = b ? c

---

(module
  (assignment
    left: (pattern
      (identifier))
    right: (existential
      object: (identifier)
      default: (identifier))))

