G      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F 1Tree representation of Haskell datatypes in OCamlPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone -67;<=STVW@Sixth unique TypeParameterRef. Fifth unique TypeParameterRef. Fourth unique TypeParameterRef. Third unique TypeParameterRef. Second unique TypeParameterRef. Used to fill the type parameters of proxy types. `Proxy :: Proxy (Maybe TypeParameterRef0)`, `Proxy :: Proxy Either TypeParameterRef0 TypeParameterRef1`. JSON representation is as an Int to simplify the automated tests.gCreate an OCaml type from a Haskell type. Use the Generic definition when possible. It also expects G and H to be derived generically.Expected types of a constructor%The name of a non-primitive data typeType parameters like a in `Maybe a`ba place holder for OCaml value. It can represent the end of a list or an Enumerator in a mixed sumA primitive OCaml type like int, string, etc.'A field name and its type from a record%Used for multiple types in a sum type&Enumerators have no values, only tags.Enumerator and its tagOCamlConstructor of one RecordConstructor is a record type. OCamlConstructor of one NamedConstructor that has one value is a Haskell newtype. OCamlConstructor of one NamedConstructor is a product without field names. OCamlConstructor of multiple NamedConstructors is a sum type. OCamlConstructor of at least one RecordConstructor and any other amount of ValueConstructors greater than one is a OCamlSumWithRecordConstructor.Product without named fieldsProduct with named fieldsSum typeAOCamlConstructor take values to create a new instances of a type.GSum, record (product with named fields) or product without named fieldsSum of enumerations only. If a sum contains enumerators and at least one constructor with a value then it is an OCamlValueConstructor Sum that contains at least one record. This construction is unique to Haskell. pIt has special Encoding and Decoding rules in order to output a valid OCaml program. i.e. `data A = A {a :: Int} | B {b :: String}`!&Smallest unit of computation in OCaml."int# bool, boolean$Ochar, it gets interpreted as a string because OCaml char does not support UTF-8% Js_date.t&float'string(())'a list, 'a Js_array.t* 'a option+"'l 'r Aeson.Compatibility.Either.t,(*)-(**).(***)/(****)0(*****)11Store data about the OCaml destination of a type.3.Store data about the Haskell origin of a type.5Top level of an OCaml datatype. A data type may be composed of primitives and/or a combination of constructors and primitives. OCamlDatatype is recursive via OCamlConstructor -> ValueConstructor -> OCamlValue -> OCamlPrimitive -> OCamlDatatype.6+The name of a type and its type constructor7A primitive valueIWhether a set of constructors is an enumeration, i.e. whether they lack values. data A = A | B | C would be simple data A = A Int | B | C would not be simple.J7Tranform an OCamlConstructor to EnumeratorConstructors K;transform a OCamlConstructor to OCamlSumOfRecordConstructorLHaskell allows you to directly declare a sum of records, i.e. data A = A {a :: Int} | B {b :: String}. This does not exist in OCaml so we have to work around it.9bConvert OCamlValues to the type parameter names of a data type. `Either a0 a1` -> `["a0","a1"]`:dgetOCamlValues flatten the values from MultipleConstructors into a list and remove ValueConstructor.; getTypePar<Matches all of the TypeParameterRefs (TypeParameterRef0 to TypeParameterRef5). This function is needed to work around the tree structure for special rules for rendering type parameters.=ZMake OCaml module prefix for a value based on the declaration's and parameter's meta data.MIterate through the beginning of a list, remove values as long as they are equal. When one inequality is found, return the value and its tail.NVZip two lists. If the right hand side is longer, then return the remaining right side.>BuckleScript has a floatT type that conflicts when you do 'open Aeson.Decode' float must be appended with   . \4Capture the Haskell right side at the sum partition `|`.^Capture the Haskell type at the left side declaration `data Maybe a`, `data Person`, etc.. Transform the constructor, depending on its values, if necessary._Handle type parameter.`'Enumerator, constructor with no values.aCapture the product comma.bCapture the constructor field.c-Capture the Haskell type at the constructor. O or P, from `data Maybe a = Just a | Nothing`. 7  !"#$%&'()*+,-./0123456789:;<=>8567!"#$%&'()*+,-./0 34128 9:;<=>Q R S T U VWXYZ[\ !"#$%&'()*+,-./01234567Internal utility functionsPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone^ZFor URLs and POSIX systems.?Parentheses of which the right parenthesis exists on a new line0An empty line, regardless of current indentationLike  $$#, but with an empty line in between 5NoneVbWOCamlTypeInFile do not require an instance of OCamlType since they are hand written OCaml files for Haskell types. Use typeable to get the type name./Create OCaml data types from Haskell data typesPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNoneVl]#render a Haskell data type in OCaml^A Haskell Sum of Records needs to be transformed into OCaml record types and a sum type. Replace RecordConstructor with NamedConstructor._Given a constructor, output a list of type parameters. (Maybe a) -> 'a0 list -> ["'a0"] (Either a b) -> 'a0 'a1 list -> ["'a0","'a1"]`OFor Haskell Sum of Records, create OCaml record types of each RecordConstructoraFPuts parentheses around the doc of an OCaml ref if it contains spaces.0Convert a 'Proxy a' into OCaml type source code.bcde]fJMake a JSON encoder for an OCamlDatatype that matches Generic aeson ToJSONPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNoneVgRender the encoder interfaceh Render the encode type signatureiRender the encoder functionj4special rendering function for sum with record typesk4special rendering function for an encoders interfacelrender product valuesmrender body rules for sum typesnIVariable names for the members of constructors Used in pattern matchesorender JSON encoders for OCamlValues. It runs recersively on Values. [Doc] helps build encoders for arrays and tuples should only use fst of return type, snd [Doc] is to help with recursionpFor an OCamlConstructor, get its OCamlValues as a list, if it has type parameters, render the encoder type signatures for each type parameter as `('a0 -> Js_json.t)` and `a0. This is for the interface. fst Doc is type parameter encoder signature snd Doc is list of type parameters which will be rendered as part of the main type's values. For `Either a b`: `("('a0 -> Js_json.t) ('a1 -> Js_json.t)","('a0, 'a1)")`q+Helper function for renderTypeParameterValsrRender type parameters as encode functions. This is for a let declaration that has a complete type signature. `Either a b` : `("(encodeA0 : 'a0 -> Js_json.t) (encodeA0 : 'a1 -> Js_json.t)", "('a0, 'a1)")`s(Helper function for renderTypeParametersttrender type parameter encoder names for all of a constructors type parameters `Either a b`: `"encodeA0 encodeA1"`aConvert a 'Proxy a' into OCaml type to JSON function source code which expects an interface file '.ml'.[Convert a 'Proxy a' into OCaml type to JSON function source code without an interface file '.mli'.:produce encode function name for data types and primitivesguhviwLMake a JSON decoder for an OCamlDatatype that matches Generic aeson FromJSONPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone;<=STV x+Render OCamlDataype into an OCaml interfacey2Render OCamlPrimitive decoders and type parametersz.Render OCamlDatatype into an OCaml declaration{IVariable names for the members of constructors Used in pattern matches|" name " -> decode name}TRender a sum type constructor in context of a data type with multiple constructors.~Render the decoding of a constructor's arguments. Note the constructor must be from a data type with multiple constructors and that it has multiple constructors itself.JRender an OCaml val interface for a record constructor in a sum of records_Convert a 'Proxy a' into OCaml type to decode JSON function source code with an interface file '.mli'.bConvert a 'Proxy a' into OCaml type to decode JSON function source code without an interface file '.mli'.xyz&Build OCaml Modules from Haskell TypesPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone,-;=>?FSTVd "Help function for HasEmbeddedFile.vUse Template Haskell to load OCaml files for an OCaml Module at compile time. '$(mkFile (Proxy :: Proxy Package))'.3Helper function to work avoid overlapped instances..Convert a Haskell type into OCaml source code.Store OCamlFileInType data.In case Generic is not derived, manually provide the type name user is responsible for making sure it is correct. otherwise it may lead to a compile error.:A handwritten OCaml type, encoder and decoder from a file.ESymobl will be expaneded to "module SymbolName = struct ... end".-An OCamlModule as a Haskell type. File level modules5 is relative to a root directory prvoiided in the  mkPackage function.  &Build OCaml Modules from Haskell TypesPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone,-1345;=>?FQSTV(Need flag to overcome overlapping issues?Produce type meta data for an OCamlPackage and its dependencies Depending on  settings,  can - make a declaration file containing encoders and decoders - make an OCaml interface file - make a Spec file that tests the encoders and decoders against a golden file and a servant server CIterate over a list of OCamlModule types that are concated with '(: |)', to create a package. Details for OCaml spec. 8Directory in which to store the OCaml spec, relative to .?Location of golden JSON files produced by Haskell, relative to .HThe URL of the automated Servant spec server to run OCaml specs against.=Options for creating an OCaml package based on Haskell types.>root directory where all relatives directories will be placed./location to place ml and mli files relative to .create an mli file if .produce OCaml spec file if O.Default .Default  . empty list modules!packages"6build a packages dependencies and its declared modules#packages& single module                 &Build OCaml Modules from Haskell TypesPlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone,-1345;=>?FQSTV -Concat a Symbol the end of a list of Symbols. Insert type into type level list$Get the length of a type level list.Append two type level lists./Convert a type into a Symbol at the type level.1AA servant route for a testing an OCaml type's encoder and decoderUtility type level function.2+Convert an OCamlPackage into a servant API.EMake hspec-aeson-golden golden files for each type in an OCamlPackage-./012344231-./0-./03!Export everything from one modulePlow Technologies, 2017BSD3mchaver@gmail.com experimentalNone0 8    2341    8 423 Safeƪ !"#$%&'()*+,--./0123456789:;<=>?@ABCDEFFGGHH6IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q RSTUSVWXYZ[\]^_^` !"#abcdefghijklmnopqrsjtuvwxyzi{|}mp~wvtmp                              +ocaml-export-0.5.0.0-2DxRIYGHFHxDqlSmQN9jmO OCaml.ExportOCaml.BuckleScript.TypesOCaml.Internal.CommonOCaml.BuckleScript.SpecOCaml.BuckleScript.RecordOCaml.BuckleScript.EncodeOCaml.BuckleScript.Decode"OCaml.BuckleScript.Internal.Module#OCaml.BuckleScript.Internal.Package OCaml.BuckleScript.Internal.SpecAesonDecodePaths_ocaml_exportbase Data.ProxyProxy%servant-0.12.1-8XbAakrPVb8LTRfFJzoq0HServant.API.Sub:>Servant.API.Alternative:<|>*servant-server-0.12-Bzw6mIIDa2A776ndZzjgGTServant.ServerserveServant.Server.InternalServer!wai-3.2.1.1-I4QCDMsntEPMa1Ww9t7kM Network.Wai ApplicationTypeParameterRef5TypeParameterRef4TypeParameterRef3TypeParameterRef2TypeParameterRef1TypeParameterRef0 OCamlType toOCamlType OCamlValueOCamlRefOCamlTypeParameterRef OCamlEmptyOCamlPrimitiveRef OCamlFieldValuesEnumeratorConstructorValueConstructorNamedConstructorRecordConstructorMultipleConstructorsOCamlConstructorOCamlValueConstructorOCamlEnumeratorConstructorOCamlSumOfRecordConstructorOCamlPrimitiveOIntOBoolOCharODateOFloatOStringOUnitOListOOptionOEitherOTuple2OTuple3OTuple4OTuple5OTuple6OCamlTypeMetaDataHaskellTypeMetaData OCamlDatatypetypeableToOCamlTypegetTypeParameterRefNamesgetOCamlValuesgetTypeParametersisTypeParameterRefmkModulePrefixoCamlValueIsFloat$fOCamlTypeProxy$fOCamlType(,,,,,)$fOCamlType(,,,,)$fOCamlType(,,,)$fOCamlType(,,)$fOCamlType(,)$fOCamlTypeBool$fOCamlTypeChar$fOCamlTypeInteger$fOCamlTypeInt$fOCamlTypeWord64$fOCamlTypeWord32$fOCamlTypeWord16$fOCamlTypeWord8$fOCamlTypeWord$fOCamlTypeInt64$fOCamlTypeInt32$fOCamlTypeInt16$fOCamlTypeInt8$fOCamlTypeDouble$fOCamlTypeFloat$fOCamlTypeUTCTime$fOCamlTypeDay$fOCamlTypeByteString$fOCamlTypeText $fOCamlType()$fOCamlTypeEither$fOCamlTypeMaybe $fOCamlType[]$fGenericValueConstructor:+:$fGenericOCamlDatatypeM1$fGenericOCamlDatatypeM10$fGenericOCamlValueK1$fGenericOCamlValueU1$fGenericOCamlValue:*:$fGenericOCamlValueM1$fGenericValueConstructorM1$fOCamlTypeTypeParameterRef0$fToJSONTypeParameterRef0$fFromJSONTypeParameterRef0!$fToADTArbitraryTypeParameterRef0$fArbitraryTypeParameterRef0$fOCamlTypeTypeParameterRef1$fToJSONTypeParameterRef1$fFromJSONTypeParameterRef1!$fToADTArbitraryTypeParameterRef1$fArbitraryTypeParameterRef1$fOCamlTypeTypeParameterRef2$fToJSONTypeParameterRef2$fFromJSONTypeParameterRef2!$fToADTArbitraryTypeParameterRef2$fArbitraryTypeParameterRef2$fOCamlTypeTypeParameterRef3$fToJSONTypeParameterRef3$fFromJSONTypeParameterRef3!$fToADTArbitraryTypeParameterRef3$fArbitraryTypeParameterRef3$fOCamlTypeTypeParameterRef4$fToJSONTypeParameterRef4$fFromJSONTypeParameterRef4!$fToADTArbitraryTypeParameterRef4$fArbitraryTypeParameterRef4$fOCamlTypeTypeParameterRef5$fToJSONTypeParameterRef5$fFromJSONTypeParameterRef5!$fToADTArbitraryTypeParameterRef5$fArbitraryTypeParameterRef5$fShowHaskellTypeMetaData$fEqHaskellTypeMetaData$fOrdHaskellTypeMetaData$fShowOCamlTypeMetaData$fEqOCamlTypeMetaData$fOrdOCamlTypeMetaData$fShowEnumeratorConstructor$fEqEnumeratorConstructor$fShowOCamlValue$fEqOCamlValue$fShowOCamlPrimitive$fEqOCamlPrimitive$fShowOCamlDatatype$fEqOCamlDatatype$fShowOCamlConstructor$fEqOCamlConstructor$fShowValueConstructor$fEqValueConstructor$fReadTypeParameterRef0$fShowTypeParameterRef0$fEqTypeParameterRef0$fGenericTypeParameterRef0$fReadTypeParameterRef1$fShowTypeParameterRef1$fEqTypeParameterRef1$fGenericTypeParameterRef1$fReadTypeParameterRef2$fShowTypeParameterRef2$fEqTypeParameterRef2$fGenericTypeParameterRef2$fReadTypeParameterRef3$fShowTypeParameterRef3$fEqTypeParameterRef3$fGenericTypeParameterRef3$fReadTypeParameterRef4$fShowTypeParameterRef4$fEqTypeParameterRef4$fGenericTypeParameterRef4$fReadTypeParameterRef5$fShowTypeParameterRef5$fEqTypeParameterRef5$fGenericTypeParameterRef5 TypeMetaDatatopLevelOCamlTypeMetaData userOptionsOptionsincludeOCamlInterface aesonOptions dependenciesdefaultOptionscr mintercalatemsuffix mconcatWithmintercalatefinishpprinterstext spaceparens newlineparens emptyline<$+$> linesBetween squarebracks arraybracketspairlowercaseFirstuppercaseFirsttextLowercaseFirsttextUppercaseFirst mkDocListfoldModmkSampleServerAndGoldenSpec toOCamlSpectypeInFileToOCamlSpectoOCamlTypeSourceWith$fHasTypeEnumeratorConstructor$fHasTypeOCamlConstructor$fHasTypeValueConstructor$fHasTypeRefOCamlPrimitive$fHasRecordTypeOCamlValue$fHasTypeOCamlValue$fHasTypeRefOCamlDatatype$fHasTypeOCamlDatatypetoOCamlEncoderInterfaceWithtoOCamlEncoderSourceWith$fHasEncoderOCamlConstructor$fHasEncoderRefOCamlPrimitive$fHasEncoderOCamlValue$fHasEncoderRefOCamlDatatype$fHasEncoderOCamlDatatype"$fHasEncoderInterfaceOCamlDatatypetoOCamlDecoderInterfaceWithtoOCamlDecoderSourceWith!$fHasDecoderEnumeratorConstructor$fHasDecoderOCamlConstructor$fHasDecoderRefOCamlPrimitive$fHasDecoderOCamlValue$fHasDecoderRefOCamlDatatype$fHasDecoderOCamlDatatype"$fHasDecoderInterfaceOCamlDatatypeHasEmbeddedFilemkFiles HasOCamlTypemkType mkInterfacemkSpecEmbeddedOCamlFileseocDeclaration eocInterfaceeocSpecHaskellTypeNameOCamlTypeInFileOCamlSubModule OCamlModule$fHasOCamlType'TYPE1a#$fHasOCamlType'TYPE2OCamlTypeInFile#$fHasOCamlType'TYPE2HaskellTypeName$fHasOCamlType'TYPE3:>$fHasOCamlType'TYPE4:>$fHasOCamlTypeTYPEa$fHasEmbeddedFile'ka%$fHasEmbeddedFile'TYPEOCamlTypeInFile%$fHasEmbeddedFile'TYPEHaskellTypeName$fHasEmbeddedFile'TYPE:>$fHasEmbeddedFile'TYPE:<|>$fHasEmbeddedFilekapi$fShowEmbeddedOCamlFilesHasOCamlTypeMetaDatamkOCamlTypeMetaDataHasOCamlModulemkModuleHasOCamlPackage mkPackage SpecOptionsspecDir goldenDir servantURLPackageOptionspackageRootDir packageSrcDirpackageEmbeddedFilescreateInterfaceFile mSpecOptions NoDependency OCamlPackagedefaultPackageOptionsdefaultSpecOptions$fHasOCamlPackage'TYPE:<|>$fHasOCamlPackage'ka$fHasOCamlModule'kapi$fHasOCamlModuleTYPE:>$fHasOCamlTypeMetaData[][]$fHasOCamlTypeMetaDataTYPE:<|>$fHasOCamlTypeMetaData[]:$fHasOCamlTypeMetaDataTYPE:>$fHasOCamlTypeMetaDataTYPE:<|>0$fHasOCamlPackageka$fHasOCamlPackageTYPE:>$fHasOCamlTypeMetaDataTYPE:>0$fHasOCamlTypeMetaData''k1a,$fHasOCamlTypeMetaData''TYPE2OCamlTypeInFile,$fHasOCamlTypeMetaData''TYPE2HaskellTypeName$fHasOCamlTypeMetaData''TYPE3:>$fHasOCamlTypeMetaData''TYPE4:>$fHasOCamlTypeMetaData'TYPEaOCamlPackageTypeCountocamlPackageTypeCountOCamlModuleTypeCountocamlModuleTypeCount OCamlSpecAPIMkOCamlSpecAPI mkGoldenFilesmkOCamlSpecServer$fHasMkGoldenFiles'TYPE1a$fHasMkGoldenFiles'TYPE2:>'$fHasMkGoldenFiles'TYPE3OCamlTypeInFile'$fHasMkGoldenFiles'TYPE3HaskellTypeName$fHasMkGoldenFiles'TYPE4:>$fHasMkGoldenFiles'TYPE5:>$fHasMkGoldenFiles'TYPE6:<|>$fHasMkGoldenFiles'TYPE7:>$fHasMkGoldenFilesTYPEa$fOCamlModuleTypeCount'kFalsea-$fOCamlModuleTypeCount'TYPETrueOCamlSubModule*$fOCamlModuleTypeCount'TYPETrueOCamlModule!$fOCamlModuleTypeCount'TYPETrue:>$fOCamlModuleTypeCountTYPEa$fOCamlPackageTypeCount'kFalsea$$fOCamlPackageTypeCount'TYPETrue:<|>"$fOCamlPackageTypeCount'TYPETrue:>$fOCamlPackageTypeCountTYPEa$aeson-1.2.3.0-IKViWrdpe5qGW36sSFwXh7Data.Aeson.Types.ToJSONToJSONData.Aeson.Types.FromJSONFromJSON isEnumerationtransformToEnumerationtransformToSumOfRecordisSumWithRecordremoveMatchingHeadzipWithRightRemainderGHC.BaseJustNothingGenericOCamlValuegenericToOCamlValueGenericValueConstructorgenericToValueConstructorGenericOCamlDatatypegenericToOCamlDatatypeHasTypereplaceRecordConstructorsrenderTypeParametersrenderSumRecordocamlRefParens HasTypeRef renderRef HasRecordType renderRecordrenderHasEncoderInterface HasEncoderRef HasEncoderrenderSumRecordInterfacejsonEncodeObject renderSumconstructorParametersrenderVariablerenderTypeParameterValsrenderTypeParameterValsAuxrenderTypeParametersAuxrenderEncodeTypeParametersrenderTypeInterfaceHasDecoderInterface HasDecoderRef HasDecoderrenderSumConditionrArgsrenderInterfaceHasEmbeddedFile' HasOCamlType'mkFiles'mkType' mkInterface'mkSpec'HasOCamlTypeMetaDataFlagghc-prim GHC.TypesTrueHasOCamlTypeMetaData''mkOCamlTypeMetaData''HasOCamlTypeMetaData'mkOCamlTypeMetaData'HasOCamlModule' mkModule'HasOCamlPackage' mkPackage' ConcatSymbolsInsertLengthAppendTypeNameMkOCamlSpecAPI'HasMkGoldenFilesOCamlPackageTypeCount'ocamlPackageTypeCount'OCamlModuleTypeCount'ocamlModuleTypeCount'HasMkGoldenFiles'mkGoldenFiles'version getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName