!qf7      !"#$%&'()*+,-./0123456 None&'2=>?@ACFGMNQSX789:;<=>None&'2=>?@ACFGMNQSX?@None&'2=>?@ACFGMNQSXkABCDEFNone&'2=>?@ACFGMNQSXRGHIJKLNone&'2=>?@ACFGMNQSX9MNOPQ None&'2=>?@ACFGMNQSXRSTUVWXYZ[\]^_`abcde None"#$%&'2=>?@ACFGMNQSX [fghijk1 None&'2=>?@ACFGMNQSX lhprotoc%Parsed Haskell name ending with FNamemhprotoc%Parsed Haskell name ending with MNamenhprotoc-Full Haskell field name: MNames separated by o, ending with a fieldphprotoc.Full Haskell module name: MNames separated by o, ending with a moduleqhprotoc%Fully qualified identifier: repeated o then identifier.rhprotoco7 separated identifier which may or may start with a dotshprotocContains one field namethprotocContains one module nameuhprotocContains one identifier namevhprotocjRight (True,_) means the input is a FIName. Right (False,_) means the input is a DIName (without leading o)whprotocjRight (True,_) means the input is a FIName. Right (False,_) means the input is a DIName (without leading o)7xyz{|}~lmnpqrstuvw None&'2=>?@ACFGMNQSXYhprotocparseType returns Nothing when the String is user-defined. This means it could be either a Message or an Enum or a syntax error. The Nothing return is fixed up in Text.ProtocolBuffers.ProtoCompile.Resolve.fqFieldhprotoc\parseLabel recognizes optional, required, and repeated. All other strings result in Nothing None&'2=>?@ACFGMNQSX8 None&'2=>?@ACFGMNQSX3None&'2=>?@ACFGMNQSXchprotoctGiven a path, tries to find and parse a FileDescriptorProto corresponding to it; returns also a canonicalised path.hprotocAn Entity is some concrete item in the namespace of a proto file. All Entity values have a leading-dot fully-qualified with the package "eName". The E'Message,Group,Service have EMap namespaces to inner Entity items.hprotoc8The EMap type is a local namespace attached to an entityWThe E'Error values come from using unique to resolse name collisions when building EMap hprotocTopLevel corresponds to all items defined in a .proto file. This includes the FileOptions since this will be consulted when generating the Haskell module names, and the imported files are only known through their TopLevel data.hprotocBy construction Env is 0 or more Local Entity namespaces followed by 1 or more Global TopLevel namespaces (self and imported files). Entities in first Global TopLevel namespace can refer to each other and to Entities in the list of directly imported TopLevel namespaces only.hprotocV mimics what I observe protoc --java_out do to convert the file name to a class name.hprotocThis is a helper for resolveEnvhprotoc9This is used for resolving some UninterpretedOption nameshprotocV is the query operation for the Env namespace. It recognizes names beginning with a o| as already being fully-qualified names. This is called from the different monads via resolveEnv, resolveMGE, and resolveMbThe returned (Right _::Entity) will never be an E'Error, which results in (Left _::ErrStr) insteadhprotoc> is used to lookup the type strings in service method records.hprotoc is used by getType and hprotocBThis is a helper for resolveEnv and (Show SEnv) for error messageshprotoc@ separates the Left errors and Right success in the obvious way.hprotocThe y function is used with Data.Map.fromListWithKey to detect name collisions and record this as E'Error entries in the map."This constructs new E'Error valueshprotoc*Compute the nameMap that determine how to translate from proto names to haskell names The loop oever makeNameMap uses the (optional) package name makeNameMaps is called from the run' routine in ProtoCompile.hs for both standalone and plugin use. hPrefix and hAs are command line controlled options. hPrefix is "-p MODULE --prefix=MODULE dotted Haskell MODULE name to use as a prefix (default is none); last flag used" hAs is "-a FILEPATH=MODULE --as=FILEPATH=MODULE assign prefix module to imported prot file: --as descriptor.proto=Text" Note that setAsK puts both the full path and the basename as keys into the association listhprotoc! conservatively checks its input.hprotoc takes a .proto file's FileDescriptorProto and the TopLevel values of its directly imported file and constructs the TopLevel of the FileDescriptorProto in a Global Environment.This goes to some lengths to be a total function with good error messages. Errors in building the skeleton of the namespace are detected and reported instead of returning the new  environment. Collisions in the namespace are only detected when the offending name is looked up, and will return an E'Error entity with a message and list of colliding Entity items. The cross-linking of Entity fields may fail and this failure is stored in the corresponding Entity.1Also caught: name collisions in Enum definitions.The 'mdo'- usage has been replace by modified forms of < that will generate useful error values instead of calling  and halting hprotoc.Used from loadProto'hprotoc is called by  The  function is quite long because there are two things going on. The first is the actual type must be retrieved from the UninterpretedOption and encoded. The second is that messagesgroups holding messagesgroups ... holding the above must wrap this. Both of the above might come from extension keys or from field names. And as usual, there are many ways thing could conceivable go wrong or be out of bounds.@The first parameter must be a name such as ["google","protobuf", FieldOption]hprotoc looks through the current and import directories to find the target file on the system. It also converts the relative path to a standard form to use as the name of the FileDescriptorProto.hprotoc[Given a list of paths to search, loads proto files by looking for them in the file system.   None&'2=>?@ACFGMNQSXfhprotoc makeLenseshprotoc=whether to use lences (if True, an underscore prefix is used)5665 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJJKLMNOOPKQRSSTKU V V W X Y Z [ \ ] ^ _ ` a b c d e f g hijk l m n o p q r stuv w x y z { | } ~   q r s w x y z { |        ttT%hprotoc-2.4.13-1c5JWB0F0NACzaF6WVqD9U(Text.ProtocolBuffers.ProtoCompile.Parser)Text.ProtocolBuffers.ProtoCompile.Resolve1Text.ProtocolBuffers.ProtoCompile.MakeReflections Paths_hprotocText.Google.Protobuf.Compiler2Text.Google.Protobuf.Compiler.CodeGeneratorRequest8Text.Google.Protobuf.Compiler.CodeGeneratorResponse.File3Text.Google.Protobuf.Compiler.CodeGeneratorResponse0Text.ProtocolBuffers.ProtoCompile.BreakRecursion%Text.ProtocolBuffers.ProtoCompile.Gen-Text.ProtocolBuffers.ProtoCompile.Identifiers+Text.ProtocolBuffers.ProtoCompile.Instances'Text.ProtocolBuffers.ProtoCompile.Lexer parseProto isValidPackedNameMapReMapCanonFP unCanonFPLocalFP unLocalFPTopLeveltop'Path top'Packagetop'FDP top'mValsEnvLocalGlobal PackageID NoPackageID _getPackageID_getNoPackageID getPackageIDgetTLS makeNameMaps loadProtoloadCodeGenRequest$fFunctorPackageID $fShowSEnv$fConsumeUNODescriptorProto$fConsumeUNOFileDescriptorProto $fConsumeUNOFieldDescriptorProto"$fConsumeUNOServiceDescriptorProto!$fConsumeUNOMethodDescriptorProto$$fConsumeUNOEnumValueDescriptorProto$fConsumeUNOEnumDescriptorProto$fShowPackageID $fReadLocalFP $fShowLocalFP $fEqLocalFP $fOrdLocalFP $fReadCanonFP $fShowCanonFP $fEqCanonFP $fOrdCanonFP $fShowNameMap $fShowEntity$fShowE'Entity$fShowTopLevel $fShowEnv serializeFDP makeProtoInfoversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName protoInfofileDescriptorProtoCodeGeneratorRequest unknown'fieldfile_to_generate parameter proto_fileFilenameinsertion_pointcontentCodeGeneratorResponseerrorfileResultrKindrIBootrIKeyPartNormalSourceKeyFile VertexKind TopProtoInfoSimpleTypeBoot KeyTypeBootSplitKeyTypeBootpKeypfKey displayResultgetKind makeResult.haskell-src-exts-1.22.0-5tSwDhjCyZb5AQf9d2FsEoLanguage.Haskell.Exts.Pretty prettyPrint oneofModule enumModule protoModuledescriptorModules$$PFNamePMNameFFNamebaseGHC.Base.FMNameFINameDINameFNameMNameIName checkDIString checkDIUtf8ManglemangleDottedpreDotsplitDIdotunconsffNamefmNamefiNamediNamefNamemNameiNamedotPMdotPFdotUtf8 dotStringunullpreUtf8 preString splitUtf8 splitStringtoString fromStringdifisplitFIfqDotsjoinDotsmanglePMmanglePFerrfixUpfixLowreserved parseType parseLabel showsLabel showsTypeLexedL L_IntegerL_DoubleL_NameL_StringL_ErroralexScanTokens getLinePosDescriptorReaderEntityEMapconvertFileToPackagetoGlobal resolveHereresolvePredEnvgetType expectMGE entityFieldwhereEnv partEitherunique makeNameMap makeTopLevelControl.Monad.FixmfixGHC.ErrinterpretOptioninterpretOptionsfindFilemakeOneofInfo' toFieldInfo'