       trailingSemicolon: semi)
   }
 
-  func parseConstructorList() -> ConstructorListSyntax {
+  func parseConstructorList() throws -> ConstructorListSyntax {
     var pieces = [ConstructorDeclSyntax]()
-    while let piece = try? parseConstructor() {
-      pieces.append(piece)
+    while case .pipe = peek() {
+      pieces.append(try parseConstructor())
     }
     return ConstructorListSyntax(elements: pieces)
   }


  func parseBindingList() throws -> BindingListSyntax {
    var pieces = [BindingSyntax]()
    while let piece = try? parseBinding() {
      pieces.append(piece)
    }

    guard !pieces.isEmpty else {

    let indices = try parseTypeIndices()
    let whereTok = try consume(.whereKeyword)
    let leftBrace = try consume(.leftBrace)
    let constrList = try parseConstructorList()
    let rightBrace = try consume(.rightBrace)
    let semi = try consume(.semicolon)
    return DataDeclSyntax(
