`X4      !"#$%&'()*+,-./0123Safe01 4+A state transformer monad parameterized by:s - The state.m - The inner monad.The 5, function leaves the state unchanged, while >>=T uses the final state of the first computation as the initial state of the second.6FConstruct a state monad computation from a function. (The inverse of runState.)7rEvaluate a state computation with the given initial state and return the final value, discarding the final state. 7 m s = 8 9 (: m s);rEvaluate a state computation with the given initial state and return the final state, discarding the final value. ; m s = 8 < (: m s)=UMap both the return value and final state of a computation using the given function. : (= f m) = f . : m>> f m executes action m" on a state modified by applying f. > f m = ? f >> m@6Fetch the current value of the state within the monad.AA s$ sets the state within the monad to s.?? f@ is an action that updates the state to the result of applying f to the current state. ? f = @ >>= (A . f)B A variant of ?6 in which the computation is strict in the new state. B f = @ >>= ((C) A . f)DMGet a specific component of the state, using a projection function supplied. D f = 8 f @4E:6pure state transformer$equivalent state-passing computation7;=>@A?BDFGHIJK 4E:7;=>@A?BD4E:67;=>@A?BDFGHIJKNone:LM[C%A presentation of a value up to WHNF.LDefinition of a type.M A type alias.N A data type.OA normalize representation of a constructor. Present's main algorithm doesn't particularly care whether it's infix, a record, or whatever.PName of a value constructor.QName of a variable.RA normalized type.SA primitive type constructor.TA type constructor.UA type variable.V9Convert the heterogenous TH type into a more normal form.WIs the type a function?X%Arity-constructor mapping for tuples.Y:Is the name specified by Name a primitive type? Like Int#?\This check may be overly cautious, but it's also about as accurate as one can seemingly be.Z0Flatten a type application f x y into (f,[x,y]).[GApply defaulted substitutions for each of the constraints in the type.\*Apply the given substitutions to the type.]Classes which when encountered in a forall context should have their corresponding type variables substituted on the right hand side with the given type.^3Enumerate all unique type constructors in the type._[Reify all the constructors of a name. Unless it's primitive, in which case return nothing.`9Convert a TH type variable to a normalized type variable.a;Make a normalized constructor from the more complex TH Con.b2Elaborate the types involved in a type definition.cLExpand a type into all the type definitions directly or indirectly related.d)Lift a Q monad into a StateT transformer.e'Make a presenter for a type definition.f?Make a printer based on an instance declaration for Present[N].g)Make a presenter for the given data type.h9Make a printer for a data type, just the expression part.iZGenerate an expression which displays a data type and its type variables as instantiated.jIs a name a tuple?k1Add parens to a string if there's a space inside.l<Make a name for an indexed field of a data type constructor.mMake a printer for a type-alias. This involves simply proxying to the real printer, whether that's a data type or a primitive, or another type-alias.nMake a presenting function.oMake a presenting function.pCAre the names basically equal, disregarding package id buggerances?q_Printers for built-in data types with custom representations (think: primitives, tuples, etc.)rVectors.s!Packed strings; Text, ByteString.sThis function cleverly acccess functions from these packages in the code generation, without actually needing the present% package to depend on them directly.tPrinters for list-like types.u"Printers for character-like types.vPrinters for pointer types.wPrinters for real number types.xPrinters for integral types.yShow a rational as x/y.zFloating point printer.{Integer printer.|Make an expression for presenting a type. This doesn't actually do any unpacking of the data structures pertaining to the types, but rather makes calls to the functions that do.}Express a primitive printer.~HName for a function name for presenting a type variable of a data type.KGiven the arity, make a lambda of that arity and ignore all the paramters.HName for a function name for presenting a type variable of a data type.;Name for a function name for presenting a type constructor.'Normalize a name into a regular format.TGet a mapping from type to instance methods of instances of Present, Present1, etc.)$Present whatever in scope is called it*Make a presenter for the name+&Present the value with the given type.;Wrap any _|_ in the presentation with an exception handler. Seq a string.'Try to get a non-bottom value from the a", otherwise return the exception.-To a familiar Show-like string..,Produce a presentation of the value to WHNF.Get the type of a value./Make JSON from WNHF.  !"#$%&'(LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)*+,-.Cursor.Value to cursor into.$A WHNF presentation of the value at cursor./0  !"#$%&'()*+,-./0)*+-./, !"#$%&'( L    !"#$%&'(LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)*+,-./      !"#$%&'()*+,-./0123456789:;<89=8>?@A8>BCDEFGH89IJ7KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RSTUVXYZ$present-4.1.0-JueLhj2OK47C0GNeEWMULlPresent Control.Monad.Trans.State.StrictWHNFDataWHNFTypeVariableWHNF PrimitiveWHNF FunctionWHNFCharWHNF IntegerWHNF ChoiceWHNF RecordWHNF ListConsWHNF ListEndWHNF StringWHNF TupleWHNF ExceptionWHNFPresent6present6Present5present5Present4present4Present3present3Present2present2Present1present1Present0present0Value DataValueTypeVariableValuePrimitiveValue FunctionValue CharValue IntegerValue ChoiceValue RecordValue ListValue StringValue TupleValueExceptionValue presentIt presentName presentType presentShowtoShowtoWHNFwhnfJson$fEqTypeVariable$fEqTypeConstructor $fShowValue $fShowWHNFStateTbaseGHC.Basereturnstate evalStateTliftM Data.Tuplefst runStateT execStateTsnd mapStateT withStateTmodifygetputmodify'$!gets$fMonadFixStateT$fMonadPlusStateT $fMonadStateT$fAlternativeStateT$fApplicativeStateT$fFunctorStateTTypeDefinition TypeAliasDataType ConstructorValueConstructor ValueVariable NormalTypePrimitiveTypeConstructorTypeConstructor TypeVariable normalizeType isFunctiontupleConstructorsisPrimitiveTypeflattenApplicationtypeClassDefaultingapplyTypeSubstitutiondefaultedClassesenumerateTypeConstructorsreifyTypeDefinitiontoTypeVariablemakeConstructorsdefinitionNormalTypesnormalTypeDefinitionsliftQtypeDefinitionPresenterinstanceBasedPresenterdataTypePresenterdataTypePresenterBody typeDisplayisTupleparensIfNeededindexedFieldNametypeAliasPresenterbuiltinFunctionDeclarationpresentingFunctionDeclarationnamesBasicallyEqualbuiltInPresentersvectorPrinters packedStrings listPrinters charPrinterspointerPrinters realPrintersintegerPrinters showRationalfloatingPrinter intPrinter expressTypeexpressPrimitivepresentUnknownVarignoreTypeVariablespresentVarNamepresentConsName normalizeNamegetPresentInstanceswrapExceptions seqStringtrySpoon valueTypeDataTypeDefinitionTypeAliasDefinition_aliasVariables _aliasType_dataTypeVariables_dataTypeConstructors_constructorNameconstructorFields NormalConsNormalPrimitiveNormalFunction NormalVar NormalApp