 //    write(" ")
 //    try visit(node.body)
 //  }
+
+  public func visit(_ node: SelectExpr) throws {
+    var repr = "."
+    if let owner = node.owner {
+      try visit(owner)
+      repr = stack.pop()! + repr
+    }
+    try visit(node.ownee)
+    repr += stack.pop()!
+
+    stack.push(repr)
+  }
 
   public func visit(_ node: Ident) throws {
     var repr = node.name

    stack.push(repr)
  }

//  public func visit(_ node: StructDecl) throws {
//    write("struct ", styled: "magenta")
//    write(node.name, styled: "yellow")
//
//    if includeType { comment(":\(str(node.type))") }
//
//    if !node.placeholders.isEmpty {
//      write("<\(str(items: node.placeholders))>")
//    }
//    write(" ")
//    try visit(node.body)
//  }
//
//  public func visit(_ node: InterfaceDecl) throws {
//    write("interface ", styled: "magenta")
//    write(node.name, styled: "yellow")

//    write("]")
//  }
//
//  public func visit(_ node: LambdaExpr) throws {
//    write("fun (")
//    for parameter in node.parameters {
