4e)       None!"+34579<=CDGIN %Parsed Haskell name ending with FName!%Parsed Haskell name ending with MName"-Full Haskell field name: MNames separated by #, ending with a field$.Full Haskell module name: MNames separated by #, ending with a module%%Fully qualified identifier: repeated # then identifier.&#7 separated identifier which may or may start with a dot'Contains one field name(Contains one module name)Contains one identifier name*jRight (True,_) means the input is a FIName. Right (False,_) means the input is a DIName (without leading #)+jRight (True,_) means the input is a FIName. Right (False,_) means the input is a DIName (without leading #)?,-./012 3!4"56$78%9:&;<'=>(?@)ABCDEFGHIJKLMNOPQ*+RSTUVWXYZ[\]^_7,-./012 3!4"56$78%9:&;<'=>(?@)ABCDEFGHIJKLMNOPQ*+RSTUVW*,-./012 3!4"56$78%9:&;<'=>(?@)ABCDEFGHIJKLMNOPQ*+RSTUVWXYZ[\]^_None!"+34579<=CDGIN6`abcdefghijklmnopqrstuvwxyz{|}~`abcdpqrstuvwxy$`abcdefghijklmnopqrstuvwxyz{|}~None!"+34579<=CDGINhhNone!"+34579<=CDGIN       None!"+34579<=CDGIN        None!"+34579<=CDGIN  !"#$ !"#$  !"#$ None!"+34579<=CDGIN %&'()*+,-./01%&'()*%&'()*+,-./01 None!"+34579<=CDGIN232323 None!"+34579<=CDGIN4parseType 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.fqField5\parseLabel recognizes optional, required, and repeated. All other strings result in Nothing674589:6745674589: None!"+34579<=CDGINR;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ MNOPQRS]e>;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None!"+34579<=CDGINBBNone!"+34579<=CDGINtGiven a path, tries to find and parse a FileDescriptorProto corresponding to it; returns also a canonicalised path.An 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.8The EMap type is a local namespace attached to an entityWThe E'Error values come from using unique to resolse name collisions when building EMap TopLevel 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.By 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.V mimics what I observe protoc --java_out do to convert the file name to a class name.This is a helper for resolveEnv9This is used for resolving some UninterpretedOption namesV is the query operation for the Env namespace. It recognizes names beginning with a #| 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) instead> is used to lookup the type strings in service method records. is used by getType and BThis is a helper for resolveEnv and (Show SEnv) for error messages@ separates the Left errors and Right success in the obvious way.The 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 values! conservatively checks its input. 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' 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.[Given a list of paths to search, loads proto files by looking for them in the file system.        !"#$%&'()*+,-./0123456789:   a         !"#$%&'()*+,-./0123456789:None!"+34579<=CDGIN;<=>? makeLenses@AB=whether to use lences (if True, an underscore prefix is used)CDEFGHIJKLMN;<=>?@ABCDEFGHIJKLMNO !"#$%&'()*+,-./0123456789:;<=)*+>/?0@1A2B3C4DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abbcdefghijkklmnopqrstuvwxyz{|}~{~                   ! " " # $ %  & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 7 9 6 : ; < ; = > ? @ A B C D E F G H I j J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~     `,, V      !"#$%&'()*+,-.~/012345678`9:;<=>?@hprot_CqqnlpYnAXEEpKG7r0N781(Text.ProtocolBuffers.ProtoCompile.Parser)Text.ProtocolBuffers.ProtoCompile.Resolve1Text.ProtocolBuffers.ProtoCompile.MakeReflections-Text.ProtocolBuffers.ProtoCompile.Identifiers0Text.ProtocolBuffers.ProtoCompile.BreakRecursion%Text.ProtocolBuffers.ProtoCompile.Gen8Text.Google.Protobuf.Compiler.CodeGeneratorResponse.File3Text.Google.Protobuf.Compiler.CodeGeneratorResponse Paths_hprotoc2Text.Google.Protobuf.Compiler.CodeGeneratorRequestText.Google.Protobuf.Compiler+Text.ProtocolBuffers.ProtoCompile.Instances'Text.ProtocolBuffers.ProtoCompile.Lexer parseProto isValidPackedNameMapReMapCanonFP unCanonFPLocalFP unLocalFPTopLeveltop'Path top'Packagetop'FDP top'mValsEnvLocalGlobal PackageID _getPackageID NoPackageID_getNoPackageID getPackageIDgetTLS makeNameMaps loadProtoloadCodeGenRequest serializeFDP makeProtoInfoPFNamePMNameFFNamebaseGHC.Base.FMNameFINameDINameFNameMNameIName checkDIString checkDIUtf8ManglemangleDottedunconspreDotdotsplitDIffNamefmNamefiNamediNamefNamemNameiNamedotPMdotPFdotUtf8 dotStringunullpreUtf8 preString splitUtf8 splitStringtoString fromStringdifisplitFIfqDotsjoinDotsmanglePMmanglePFerrfixUpfixLowreserved$fMangleINameFName$fMangleINameFName0$fMangleINameFName1$fMangleINameMName$fMangleINameMName0$fMangleINameMName1 $fDotted[] $fDottedUtf8ResultrKindrIBootrIKeySCCsGELabelLVvMKey vNeedsKeysvKeysNeedsTypesvTypeNeedsTypesPartNormalSourceKeyFile VertexKind TopProtoInfoSimpleTypeBoot KeyTypeBootSplitKeyTypeBootMKeyecartfst3snd3impiguardpKeypfKey displayResultshowSCCsshowGshowEgetKindgetTypegetKey makeResultmakeG makeVertices breakKeysscorecyclespullEach makeEdgesForV breakGraphrejoinVertices breakCyclecull$fMonoidResultnubSortnoWhere whereBinds$$srclitStrlitIntPlitIntP'litIntlitInt'typeAppprivatepreludelocal localFieldisVarisConpvar preludevarlvarpcon preludeconlconpatvarmatchinstdefunmkOpcomposefqModimportPN importPFNimportO mergeImportskeyFilejoinMod baseIdent baseIdent' fieldIdentqualName qualFName unqualName unqualFName mayQualNameoneofCononeofPatoneofReconeofGet modulePragmas oneofModule oneofDeclsoneofX oneofFuncsinstanceDefaultOneofinstanceMergeableOneof enumModule enumDeclsenumXinstanceTextTypeEnuminstanceMergeableEnuminstanceBoundedinstanceDefaultEnum declToEnum instanceEnuminstanceWireEnum instanceGPBinstanceReflectEnumhasExt protoModuleembed'ProtoInfo embed'fdpBSdescriptorModulesdescriptorBootModuledescriptorKeyBootModuledescriptorKeyfileModuledescriptorNormalModulemkLenses exportLensesminimalImportsstandardImports keysXType keysXTypeVal makeKeyType makeKeyVal defToSyntax descriptorXinstancesDescriptorinstanceExtendMessageinstanceUnknownMessageinstanceTextTypeinstanceTextMsg printField toPrintName printOneofinstanceMergeableinstanceDefaultinstanceMessageAPIinstanceWireDescriptorinstanceReflectDescriptorderives derivesEnumuseTypehaske_4FklJxiwJoAI0XtFimUoU7Language.Haskell.Exts.Pretty prettyPrintFilenameinsertion_pointcontent unknown'field$fReflectDescriptorFile $fGPBFile$fMessageAPImsg'(->)File $fWireFile $fDefaultFile$fMergeableFile$fUnknownMessageFileCodeGeneratorResponseerrorfile($fReflectDescriptorCodeGeneratorResponse$fGPBCodeGeneratorResponse)$fMessageAPImsg'(->)CodeGeneratorResponse$fWireCodeGeneratorResponse$fDefaultCodeGeneratorResponse $fMergeableCodeGeneratorResponse%$fUnknownMessageCodeGeneratorResponsecatchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameCodeGeneratorRequestfile_to_generate parameter proto_file'$fReflectDescriptorCodeGeneratorRequest$fGPBCodeGeneratorRequest($fMessageAPImsg'(->)CodeGeneratorRequest$fWireCodeGeneratorRequest$fDefaultCodeGeneratorRequest$fMergeableCodeGeneratorRequest$$fUnknownMessageCodeGeneratorRequest protoInfofileDescriptorProto parseType parseLabel showsLabel showsType readLabelreadType<< AlexAccPredAlexAcc AlexAccNone AlexAccSkipAlexAccSkipPred AlexLastAccAlexNone AlexLastSkip AlexReturnAlexEOF AlexErrorAlexSkip AlexTokenAlexAddrAlexA#Lexed L_IntegerL_DoubleL_NameL_StringL_ErrorAlexPosnAlexPn AlexInputByteignorePendingBytesalexInputPrevChar alexGetByte alexStartPosalexMovealexScanTokens alex_tab_size alex_base alex_table alex_check alex_deflt alex_acceptline getLinePoserrAtdieAtwtfAtmayReadparseDecparseOctparseHex parseDoubleparseStr parseNinf parseName parseCharopsDecode alex_action_2 alex_action_3 alex_action_4 alex_action_5 alex_action_6 alex_action_7 alex_action_8 alex_action_9alex_action_10alex_action_11alex_action_12alex_action_13alex_action_14alexIndexInt16OffAddralexIndexInt32OffAddr quickIndexalexScan alexScanUser alex_scan_tkn alexAndPredalexPrevCharIsalexPrevCharMatchesalexPrevCharIsOneOfalexRightContext$fFunctorAlexLastAccPtruefalsetokpChareoleolspName rawStrMany getAggregate getNextTokenbsLitstrLitintLitfieldIntenumInt doubleLitfloatLitidentident1 ident_packageboolLitenumLit subParserreturn'fmap'update'parser importFilepackagepOptionE pOptionWithpUnValuemakeUninterpetedOption fileOptiononeofsubOneof fieldOneofmessage subMessage messageOptionextendfieldsubFielddefaultConstantconstant fieldOptionenumsubEnum enumOptionenumVal subEnumValueenumValueOption extensionsservicesyntax serviceOptionrpcsubRpc rpcOptioncEncodeshowRF undoLexerDescriptorReaderEntityEMapconvertFileToPackagetoGlobal resolveHereresolvePredEnv expectMGE entityFieldwhereEnv partEitherunique makeNameMap makeTopLevelControl.Monad.FixmfixGHC.ErrfindFile ConsumeUNO consumeUNOMRMSEErrStrSEnv my'Parentmy'EnvREE'EntityE'OkE'Error E'MessageeNamevalidExtensionsmValsE'Group E'ServiceE'KeyeMsgfNumberfTypemValE'FieldE'EnumeValsE'MethodeMsgIneMsgOutindentishowerrMsgthrowannErrgetJustdefaultPackageName getPackagecheckPackageIDjoinDotcheckFI getExtRangesfpLocalToCanonfpCanonToLocal allowedGlobalallowedT allowedLocal emptyEntityemptyEnvrunSEfqName fiFromString iToString get'mVals'E get'mValsgetTL resolveEnv resolveREmaybeM runMRM'Reader runMRM'WritermrmNamegetNamesdescendkidsmyFixSEmyFixE entityMsg entityEnum entityService entityMethodfqFailfqFileDP fqMessage fqServicefqMethodfqFieldfqEnuminterpretOptionsinterpretOption loadProto' loadFailed$fConsumeUNODescriptorProto$fConsumeUNOFileDescriptorProto $fConsumeUNOFieldDescriptorProto"$fConsumeUNOServiceDescriptorProto!$fConsumeUNOMethodDescriptorProto$$fConsumeUNOEnumValueDescriptorProto$fConsumeUNOEnumDescriptorProto $fShowSEnv$fFunctorPackageIDpnPath toHaskell makeEnumInfo'makeOneofInfo' keyExtendee'makeDescriptorInfo' toFieldInfo'collectedGroupsparseDefaultValue parseDefEnumparseDefDouble parseDefFloatparseDefString parseDefBytesparseDefInteger parseDefBool readSigned'