anchor.diff:      let toType s = typeMap.[s]
   
       let pPrimitiveType =
  -        ( str "double"  <|> str "float"     <|>
  -            str "int32"   <|> str "int64"     <|>
  -            str "uint32"  <|> str "uint64"    <|>
  -            str "sint32"  <|> str "sint64"    <|>
  -            str "fixed32" <|> str "fixed64"   <|>
  -            str "sfixed32"<|> str "sfixed64"  <|>
  -            str "bool"    <|>
  -            str "string"  <|> str "bytes"
  +        ( choice
  +            [ str "double"  ; str "float"     ;
  +              str "int32"   ; str "int64"     ;
  +              str "uint32"  ; str "uint64"    ;
  +              str "sint32"  ; str "sint64"    ;
  +              str "fixed32" ; str "fixed64"   ;
  +              str "sfixed32"; str "sfixed64"  ;
  +              str "bool"    ;
  +              str "string"  ; str "bytes"
  +            ]
           ) .>> ws |>> toType
   
       let pIdentType =
  
positive.code:     .>> eof
  
  and internal pProtoStatement =
          pSyntax
      <|> pImport
      <|> pPackage
      <|> pOptionStatement
      <|> pMessage
      <|> pEnum
      <|> (isProto2 >>. pExtend)
      <|> pService
  
  // Resolve recursive parsers
  do pMessageDefR := pMessageDefImpl
  
negative.code:     let pMessageMessage =
          pMessageDef |>> TMessageMessage
  
      choice [
          (isProto2 >>. pGroup) // must be parsed first to avoid confusion
          pField
          pMessageEnum
          pMessageMessage
          (isProto2 >>. pMessageExtend)
          (isProto2 >>. pExtensions)
          pMessageOption
          pOneOf
          pMap
          pReserved
          ]
  
  /// Parse message option: "option" (ident | "(" fullIdent ")" { "." ident }
  and pMessageOption =
  