type_ :: Parser Type
type_ = choice
  [ "double" *> pure TDouble
  , "float" *> pure TFloat
  , "int32" *> pure TInt32
  , "int64" *> pure TInt64
  , "uint32" *> pure TUInt32
  , "uint64" *> pure TUInt64
  , "sint32" *> pure TSInt32
  , "sint64" *> pure TSInt64
  , "fixed32" *> pure TFixed32
  , "sfixed32" *> pure TSFixed32
  , "sfixed64" *> pure TSFixed64
  , "bool" *> pure TBool
  , "string" *> pure TString
  , "bytes" *> pure TBytes
  , TUser <$> userType ]
type_ :: Parser Type
type_ = choice
  [ "double" *> pure TDouble
  , "float" *> pure TFloat
  , "int32" *> pure TInt32
  , "int64" *> pure TInt64
  , "uint32" *> pure TUInt32
  , "uint64" *> pure TUInt64
  , "sint32" *> pure TSInt32
  , "sint64" *> pure TSInt64
  , "fixed32" *> pure TFixed32
  , "sfixed32" *> pure TSFixed32
  , "sfixed64" *> pure TSFixed64
  , "bool" *> pure TBool
  , "string" *> pure TString
  , "bytes" *> pure TBytes
  , TUser <$> userType ]
type_ = choice
  [ "double" *> pure TDouble
  , "float" *> pure TFloat
  , "int32" *> pure TInt32
  , "int64" *> pure TInt64
  , "uint32" *> pure TUInt32
  , "uint64" *> pure TUInt64
  , "sint32" *> pure TSInt32
  , "sint64" *> pure TSInt64
  , "fixed32" *> pure TFixed32
  , "sfixed32" *> pure TSFixed32
  , "sfixed64" *> pure TSFixed64
  , "bool" *> pure TBool
  , "string" *> pure TString
  , "bytes" *> pure TBytes
  , TUser <$> userType ]