               blockInfo: reader.blockInfo)
   }
 
+  /// Traverse a bitstream using the specified `visitor`, which will receive
+  /// callbacks when blocks and records are encountered.
   public static func read<Visitor: BitstreamVisitor>(stream data: Data, using visitor: inout Visitor) throws {
     precondition(data.count > 4)
     let signatureValue = UInt32(Bits(buffer: data).readBits(atOffset: 0, count: 32))

  }
}

public struct Bitcode {
  public let signature: Signature
  public let elements: [BitcodeElement]

}

extension Bitcode {
  /// Parse a bitstream from data.
  public init(data: Data) throws {
    precondition(data.count > 4)
    let signatureValue = UInt32(Bits(buffer: data).readBits(atOffset: 0, count: 32))
