h$t      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred Safe-Inferred.None K pcre2"...string lengths and offsets into strings of code units...are always of type  PCRE2_SIZE...currently always defined as size_t." pcre2"The SPTR/ types are constant pointers to the equivalent UCHAR types, that is, they are pointers to vectors of unsigned code units." pcre2"The UCHAR types define unsigned code units of the appropriate widths. For example,  PCRE2_UCHAR16 is usually defined as uint16_t."rpcre2May be returned by e.pcre2!See below for possible bit flags.pcre2 Array of 2 ( PCRE2_SIZE[2])pcre2("Missing low surrogate at end of string"pcre2."Invalid low surrogate follows high surrogate"pcre2"Isolated low surrogate"pcre2 custom mallocpcre2 custom freepcre2See below for possible values.pcre2See below for possible values.pcre29See "Extra compile options" below for possible bit flags.pcre2Can be unset. See below.(pcre2See below for possible values.pcre2/See the C API docs for what gets returned here.<pcre2#Can be zero-terminated. See below.pcre28See "Main compile options" below for possible bit flags.epcre2!See below for possible bit flags.jpcre2See below for possible values.pcre2$See below for possible error values.qpcre2subjectpcre2lengthpcre2 startoffsetpcre2optionspcre2namepcre2firstpcre2lastpcre2subjectpcre2lengthpcre2 startoffsetpcre2!See below for possible bit flags.pcre2ovecsizepcre2subjectpcre2lengthpcre2 startoffsetpcre2optionspcre2 workspacepcre2wscountpcre2namepcre2 bufferptrpcre2bufflenpcre2namepcre2bufferpcre2bufflenpcre2namepcre2lengthpcre2namepcre2listptrpcre2 lengthsptrpcre2namepcre2 bufferptrpcre2bufflenpcre2numberpcre2bufferpcre2bufflenpcre2numberpcre2lengthpcre2subjectpcre2lengthpcre2 startoffsetpcre2optionspcre2 replacementpcre2rlength pcre2 outputbuffer pcre2 outlengthptr  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  '&%$#"! ,+*)(-./0123456789:;=BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfeghirqponmlkjstuvwxyz{|}~None#$./5f_pcre2PCRE2 compile exceptions. Along with a message stating the cause, we show the pattern with a cursor pointing at where the error is (if not after the last character).pcre2Vanilla PCRE2 exceptions with messages generated by the underlying C library.pcre2*The root of the PCRE2 exception hierarchy.pcre2Look up the number of a capture at compile time, either by number or by name. Throw a helpful  if the index doesn't exist.pcre2 The kind of 's info.pcre2A wrapper around a list of captures that carries additional type-level information about the number and names of those captures.-This type is only intended to be created by / and consumed by  / ., relying on type inference. Specifying the info explicitly in a type signature is not supported@the definition of ? is not part of the public API and may change without warning.After obtaining  it's recommended to immediately consume them and transform them into application-level data, to avoid leaking the types to top level and having to write signatures. In times of need, " Captures _#" may be written with the help of &{-# LANGUAGE PartialTypeSignatures #-}.pcre2A function that takes a C match result and extracts captures into a container. We need to pass this effectful callback to  because of the latter's imperative loop that reuses the same pcre2_match_data block. ...pcre2Like 9, but for a function of two arguments. Currently unused.pcre2Like ;, but for a function of three arguments. Currently unused.pcre2Zero-copy slice a ). An unset capture is represented by a ,- range and is interpreted in this library as .pcre2Slice a 1, copying if it's less than half of the original.pcre2%Effectfully transform yielded values.pcre2Unsafely, lazily tear down a  into a pure list of values yielded. The stream must be infinite in the sense of it only terminating due to explicit .pcre2 C to Haskell.pcre2 Haskell to C.pcre2 C to Haskell.pcre2 Haskell to C.pcre2An  can result in multiple "plans".pcre2 Use a fake Prism'" to extract a category of options.pcre2Prepare to compile a .pcre2 Compile a .pcre2Prepare a matching function.pcre2 Helper for  assemble* functions. Basically, extract all options and help produce a function that takes a  subject.pcre2 Produce a  from user-supplied  and pattern.pcre2A  works by first writing results to a reasonably-sized buffer. If we run out of room, PCRE2 allows us to simulate the rest of the substitution without writing anything, in order to calculate how big the buffer actually has to be. In this event, we rerun the substitution with a new, exactly-sized buffer.One potential issue arising from two attempts is running effectful callouts twice. We mitigate this by skipping callouts the second time:all regular callouts, since they had run during the simulation, and8those substitution callouts that had run the first time.Therefore, the first time, log the substitution callout indexes that had run along with their results, and replay the log the second time, returning those same results without re-incurring effects.pcre2Generate per-call data for  pcre2_match() etc., to accommodate callouts.We need to save and inspect state that occurs in potentially concurrent matches. This means a new state ref for each match, which means a new > to close on it, which means a new match context to set it to.pcre23Within a callout, marshal the original subject and pcre2_callout_block data to Haskell and present to the user function. Ensure no pointers are leaked!pcre2Within a substitution callout, marshal the original subject and pcre2_substitute_callout_block data to Haskell and present to the user function. Ensure no pointers are leaked!pcre2=If there was a callout and it threw an exception, rethrow it.pcre2The most general form of a matching function, which can also be used as a Setter'/ to perform substitutions at the Haskell level.pcre2Read all specifically indexed captures' offsets from match results.pcre27Read just the 0th capture's offsets from match results.pcre2.Read all captures' offsets from match results.pcre2Placeholder for building a  Traversal` to be passed to .pcre2Match a pattern to a subject and return some non-empty list(s) of captures in an , or / if no match. The non-empty list constructor  serves as a cue to differentiate the 0th capture from the others: let parseDate = captures "(\\d{4})-(\\d{2})-(\\d{2})" in case parseDate "submitted 2020-10-20" of Just (date :| [y, m, d]) -> ... Nothing -> putStrLn "didn't match"pcre2 capturesOpt mempty = capturespcre21Does the pattern match the subject at least once?pcre2 matchesOpt mempty = matchespcre2Match a pattern to a subject and return the portion(s) that matched in an , or  if no match.pcre2 matchOpt mempty = matchpcre2(Perform at most one substitution. See  5https://pcre.org/current/doc/html/pcre2api.html#SEC36the docs for the special syntax of  replacement.sub "(\\w+) calling the (\\w+)" "$2 calling the $1" "the pot calling the kettle black"""the kettle calling the pot black"pcre2Perform substitutions globally.!gsub "a" "o" "apples and bananas""opples ond bononos"pcre2 ,subOpt mempty = sub subOpt SubGlobal = gsub pcre2Given a pattern, produce a traversal (0 or more targets) that focuses from a subject to each non-empty list of captures that pattern matches.Substitution works in the following way: If a capture is set such that the new  is not equal to the old one, a substitution occurs, otherwise it doesn't. This matters in cases where a capture encloses another capture@notably, all0 parenthesized captures are enclosed by the 0th.$threeAndMiddle = _captures ". (.) .","A A A" & threeAndMiddle .~ "A A A" :| ["B"]"A B A","A A A" & threeAndMiddle .~ "A B A" :| ["A"]"A B A"Changing multiple overlapping captures won't do what you want and is unsupported.Changing an unset capture is unsupported because the PCRE2 match API does not give location info about it. Currently we ignore all such attempts. (Native substitution functions like ) do not have this limitation. See also  and .)If the list becomes longer for some reason, the extra elements are ignored. If it's shortened, the absent elements are considered to be unchanged.It's recommended that the list be modified capture-wise, using  https://hackage.haskell.org/package/microlens/docs/Lens-Micro.html#v:ixix. let madlibs = _captures "(\\w+) my (\\w+)" print $ "Well bust my buttons!" &~ do zoom madlibs $ do ix 1 . _head .= 'd' ix 2 %= Text.reverse _last .= '?' -- "Well dust my snottub?"pcre2 _capturesOpt mempty = _capturespcre2Given a pattern, produce a traversal (0 or more targets) that focuses from a subject to the non-overlapping portions of it that match.  _match =  patt . ix 0pcre2 _matchOpt mempty = _matchpcre2From options and pattern, determine parenthesized captures' names in order.pcre2+Get parenthesized captures' names in order.pcre28Low-level access to compiled pattern info, per the docs.pcre2Safely lookup a capture in a  result obtained from a Template Haskell-generated matching function.7The ugly type signature may be interpreted like this: Given some capture  group index i and some info, about a regex, ensure that index exists and is resolved to the number num* at compile time. Then, at runtime, get a &capture group from a list of captures.In practice the variable i is specified by type application and the other variables are inferred. capture @3 capture @"bar"Specifying a nonexistent number or name will result in a type error.pcre2Like  but focus from a  to a capture.pcre29Built-in message corresponding to the integer error code.pcre2!Most PCRE2 C functions return an int indicating a possible error. Test it against a predicate, and throw an exception upon failure.pcre26Helper for getting PCRE2 compile-time config integers.pcre25Helper for getting PCRE2 compile-time config strings.pcre2See .pcre2Which code widths PCRE2 is compiled to operate on. Can be any combination of 8, 16, and 32. Should be [16]$ but provided here for completeness.pcre2See .pcre2See .pcre2!Was PCRE2 built with JIT support?pcre2A nice description of the CPU architecture JIT support is compiled for, if any.pcre2>Number of bytes used for internal linkage in compiled regexes.pcre2See .pcre2See .pcre2See .pcre2See .pcre2>Size in bytes of PCRE2's built-in character processing tables.pcre2Unicode version string such as 8.0.0!, if Unicode is supported at all.pcre2%Was PCRE2 built with Unicode support?pcre2Version of the built-in C library. The versioning scheme is that PCRE legacy is 8.x and PCRE2 is 10.x, so this should be 10. something.pcre2 replacementpcre2patternpcre25Callout info requires access to the original subject.pcre2patternpcre2 replacementpcre2subjectpcre2result None/r pcre2Unexported, top-level  that's created upon the first runtime evaluation of a Template Haskell .pcre2&Given a pattern, create or retrieve a  from the global cache.pcre2Predict parenthesized captures  maybe named of a pattern at splice time.pcre2Get the indexes of  the named captures.pcre23Generate the data-kinded phantom type parameter of  of a pattern, if needed.pcre2 Helper for  with no parenthesized captures.pcre2 Helper for  with parenthesized captures.pcre2 Helper for  as a guard pattern.pcre2 Helper for ) as a pattern that binds local variables.pcre2 Helper for  with no parenthesized captures.pcre2 Helper for  with parenthesized captures.pcre2As an expression ?regex :: (Alternative f) => String -> Text -> f (Captures info)-in the presence of parenthesized captures, or 4regex :: (Alternative f) => String -> Text -> f Textif there are none. In other words, if there is more than the 0th capture, this behaves like  (except returning an opaque  instead of a " list), otherwise it behaves like .)To retrieve an individual capture from a , use . case [regex|(?\d{4})-(?\d{2})-(?\d{2})|] "submitted 2020-10-20" of Just cs -> let date = capture @0 cs year = read @Int $ Text.unpack $ capture @"y" cs ... forM_ ([regex|\s+$|] line :: Maybe Text) $ \spaces -> error $ "line has trailing spaces (" ++ show (Text.length spaces) ++ " characters)" As a patternThis matches when the regex first matches, whereupon any named captures are bound to variables of the same names. case "submitted 2020-10-20" of [regex|(?\d{4})-(?\d{2})-(?\d{2})|] -> let year = read @Int $ Text.unpack y ...Note that it is not possible to access the 0th capture this way. As a workaround, explicitly capture the whole pattern and name it. Traversal' Text (Captures info) _regex :: String -> Traversal' Text Text import Control.Lens import Data.Text.Lens embeddedNumber :: Traversal' String Int embeddedNumber = packed . [_regex|\d+|] . unpacked . _Show main :: IO () main = putStrLn $ "There are 14 competing standards" & embeddedNumber %~ (+ 1) -- There are 15 competing standards NonerNonetV     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~               "pcre2-2.0.0-6QpJHBFqcNL8Hi5CFtGZyfText.Regex.Pcre2.ForeignText.Regex.Pcre2Text.Regex.Pcre2.Unsafe Paths_pcre2Text.Regex.Pcre2.Foreign.THText.Regex.Pcre2.Internalregex_regexcapture_captureText.Regex.Pcre2.THPcre2_callout_enumerate_blockPcre2_match_dataPcre2_jit_stack Pcre2_codePcre2_substitute_callout_blockPcre2_callout_blockPcre2_match_contextPcre2_compile_contextPcre2_general_context PCRE2_SIZE PCRE2_SPTR PCRE2_UCHARpcre2_compile_context_freepcre2_compile_context_copypcre2_compile_context_createpcre2_general_context_freepcre2_general_context_copypcre2_general_context_create pcre2_set_bsrpcre2_ERROR_BADDATApcre2_BSR_ANYCRLFpcre2_set_newlinepcre2_set_max_pattern_lengthpcre2_set_compile_extra_optionspcre2_set_character_tablespcre2_BSR_UNICODEpcre2_NEWLINE_CRpcre2_NEWLINE_LFpcre2_NEWLINE_CRLFpcre2_NEWLINE_ANYpcre2_NEWLINE_ANYCRLFpcre2_set_offset_limitpcre2_set_substitute_calloutpcre2_set_calloutpcre2_match_context_freepcre2_match_context_copypcre2_match_context_create!pcre2_set_compile_recursion_guardpcre2_set_parens_nest_limitpcre2_NEWLINE_NUL pcre2_configpcre2_set_depth_limitpcre2_set_match_limitpcre2_set_heap_limit pcre2_UNSETpcre2_CONFIG_BSRpcre2_CONFIG_COMPILED_WIDTHSpcre2_CONFIG_DEPTHLIMITpcre2_CONFIG_HEAPLIMITpcre2_CONFIG_JITpcre2_CONFIG_JITTARGETpcre2_CONFIG_LINKSIZEpcre2_CONFIG_MATCHLIMITpcre2_CONFIG_NEWLINEpcre2_CONFIG_NEVER_BACKSLASH_Cpcre2_CONFIG_PARENSLIMITpcre2_CONFIG_STACKRECURSEpcre2_CONFIG_TABLES_LENGTHpcre2_CONFIG_UNICODE_VERSIONpcre2_CONFIG_UNICODE pcre2_compilepcre2_CONFIG_VERSIONpcre2_code_copy_with_tablespcre2_code_copypcre2_code_freepcre2_ZERO_TERMINATEDpcre2_ANCHOREDpcre2_ALLOW_EMPTY_CLASSpcre2_ALT_BSUXpcre2_ALT_CIRCUMFLEXpcre2_ALT_VERBNAMESpcre2_AUTO_CALLOUTpcre2_CASELESSpcre2_DOLLAR_ENDONLY pcre2_DOTALLpcre2_DUPNAMESpcre2_ENDANCHOREDpcre2_EXTENDEDpcre2_EXTENDED_MOREpcre2_FIRSTLINE pcre2_LITERALpcre2_MATCH_INVALID_UTFpcre2_MATCH_UNSET_BACKREFpcre2_MULTILINEpcre2_NEVER_BACKSLASH_Cpcre2_NEVER_UCPpcre2_NEVER_UTFpcre2_NO_AUTO_CAPTUREpcre2_NO_AUTO_POSSESSpcre2_NO_DOTSTAR_ANCHORpcre2_NO_START_OPTIMIZEpcre2_NO_UTF_CHECK pcre2_UCPpcre2_UNGREEDYpcre2_USE_OFFSET_LIMIT pcre2_UTF#pcre2_EXTRA_ALLOW_SURROGATE_ESCAPESpcre2_EXTRA_ALT_BSUX!pcre2_EXTRA_BAD_ESCAPE_IS_LITERALpcre2_EXTRA_ESCAPED_CR_IS_LFpcre2_EXTRA_MATCH_LINEpcre2_jit_compilepcre2_EXTRA_MATCH_WORDpcre2_JIT_COMPLETEpcre2_JIT_PARTIAL_HARDpcre2_JIT_PARTIAL_SOFTpcre2_pattern_infopcre2_maketables_freepcre2_maketablespcre2_jit_stack_freepcre2_jit_stack_assignpcre2_jit_stack_createpcre2_jit_free_unused_memorypcre2_jit_matchpcre2_ERROR_JIT_BADOPTIONpcre2_INFO_ALLOPTIONSpcre2_INFO_ARGOPTIONSpcre2_INFO_EXTRAOPTIONSpcre2_INFO_BACKREFMAXpcre2_INFO_BSRpcre2_INFO_CAPTURECOUNTpcre2_INFO_DEPTHLIMITpcre2_INFO_FIRSTBITMAPpcre2_INFO_FIRSTCODETYPEpcre2_INFO_FIRSTCODEUNITpcre2_INFO_FRAMESIZEpcre2_INFO_HASBACKSLASHCpcre2_INFO_HASCRORLFpcre2_INFO_HEAPLIMITpcre2_INFO_JCHANGEDpcre2_INFO_JITSIZEpcre2_INFO_LASTCODETYPEpcre2_INFO_LASTCODEUNITpcre2_INFO_MATCHEMPTYpcre2_INFO_MATCHLIMITpcre2_INFO_MAXLOOKBEHINDpcre2_INFO_MINLENGTHpcre2_INFO_NAMECOUNTpcre2_INFO_NAMEENTRYSIZEpcre2_INFO_NAMETABLEpcre2_INFO_NEWLINEpcre2_INFO_SIZEpcre2_callout_enumeratepcre2_substring_nametable_scanpcre2_ERROR_UNSETpcre2_callout_block_version"pcre2_callout_block_callout_numberpcre2_callout_block_capture_top pcre2_callout_block_capture_last!pcre2_callout_block_callout_flagspcre2_CALLOUT_STARTMATCHpcre2_CALLOUT_BACKTRACK!pcre2_callout_block_offset_vectorpcre2_callout_block_markpcre2_callout_block_subject"pcre2_callout_block_subject_lengthpcre2_callout_block_start_match$pcre2_callout_block_current_position$pcre2_callout_block_pattern_position$pcre2_callout_block_next_item_length)pcre2_callout_block_callout_string_offset)pcre2_callout_block_callout_string_length"pcre2_callout_block_callout_string%pcre2_callout_enumerate_block_version.pcre2_callout_enumerate_block_pattern_position.pcre2_callout_enumerate_block_next_item_length,pcre2_callout_enumerate_block_callout_number3pcre2_callout_enumerate_block_callout_string_offset3pcre2_callout_enumerate_block_callout_string_length,pcre2_callout_enumerate_block_callout_string&pcre2_substitute_callout_block_version(pcre2_substitute_callout_block_subscount$pcre2_substitute_callout_block_input%pcre2_substitute_callout_block_output&pcre2_substitute_callout_block_ovector(pcre2_substitute_callout_block_oveccount pcre2_matchpcre2_match_data_free$pcre2_match_data_create_from_patternpcre2_match_data_create-pcre2_substitute_callout_block_output_offsetspcre2_COPY_MATCHED_SUBJECT pcre2_NOTBOL pcre2_NOTEOLpcre2_NOTEMPTYpcre2_NOTEMPTY_ATSTART pcre2_NO_JITpcre2_PARTIAL_HARDpcre2_PARTIAL_SOFTpcre2_ERROR_NOMATCHpcre2_ERROR_PARTIALpcre2_ERROR_BADMAGICpcre2_ERROR_BADMODEpcre2_ERROR_BADOFFSETpcre2_ERROR_BADOPTIONpcre2_ERROR_BADUTFOFFSETpcre2_ERROR_CALLOUTpcre2_ERROR_DEPTHLIMITpcre2_ERROR_HEAPLIMITpcre2_ERROR_INTERNALpcre2_ERROR_JIT_STACKLIMITpcre2_ERROR_MATCHLIMITpcre2_ERROR_NOMEMORYpcre2_ERROR_NULLpcre2_ERROR_UTF16_ERR1pcre2_ERROR_UTF16_ERR2pcre2_dfa_matchpcre2_ERROR_UTF16_ERR3pcre2_DFA_SHORTESTpcre2_DFA_RESTARTpcre2_ERROR_DFA_UFUNCpcre2_ERROR_DFA_UITEMpcre2_ERROR_DFA_UCONDpcre2_ERROR_DFA_UINVALID_UTFpcre2_ERROR_DFA_WSSIZEpcre2_ERROR_DFA_RECURSEpcre2_substring_freepcre2_substring_get_bynamepcre2_substring_copy_bynamepcre2_substring_length_byname pcre2_substring_number_from_namepcre2_substring_list_freepcre2_substring_list_getpcre2_substring_get_bynumberpcre2_substring_copy_bynumberpcre2_substring_length_bynumberpcre2_get_ovector_pointerpcre2_get_ovector_countpcre2_ERROR_DFA_BADRESTARTpcre2_ERROR_NOSUBSTRINGpcre2_ERROR_NOUNIQUESUBSTRINGpcre2_substitutepcre2_ERROR_UNAVAILABLE!pcre2_SUBSTITUTE_REPLACEMENT_ONLYpcre2_SUBSTITUTE_GLOBALpcre2_SUBSTITUTE_MATCHED pcre2_SUBSTITUTE_OVERFLOW_LENGTHpcre2_SUBSTITUTE_LITERALpcre2_SUBSTITUTE_UNKNOWN_UNSETpcre2_SUBSTITUTE_UNSET_EMPTYpcre2_SUBSTITUTE_EXTENDEDpcre2_ERROR_BADREPLACEMENTpcre2_ERROR_BADREPESCAPEpcre2_ERROR_BADSUBSTITUTIONpcre2_get_error_messagepcre2_get_startcharpcre2_get_markpcre2_ERROR_BADSUBSPATTERNPcre2CompileExceptionPcre2ExceptionSomePcre2ExceptionCapturesSubCalloutResultSubCalloutAcceptSubCalloutSkipSubCalloutAbortSubCalloutInfosubCalloutSubsCountsubCalloutCapturessubCalloutSubjectsubCalloutReplacement CalloutResultCalloutProceedCalloutNoMatchHereCalloutNoMatch CalloutIndex CalloutNumber CalloutName CalloutAuto CalloutInfo calloutIndexcalloutCapturescalloutSubject calloutMarkcalloutIsFirstcalloutBacktrackedNewline NewlineCr NewlineLf NewlineCrlf NewlineAnyNewlineAnyCrlf NewlineNulBsr BsrUnicode BsrAnyCrlfOptionAllowEmptyClassAltBsux AltBsuxLegacy AltCircumflex AltVerbNamesAnchoredBadEscapeIsLiteralCaseless DepthLimit DollarEndOnlyDotAll EndAnchored EscapedCrIsLfExtended ExtendedMore FirstLine HeapLimitLiteral MatchLimit MatchLineMatchUnsetBackRef MatchWordMaxPatternLength MultilineNeverBackslashCNeverUcp NoAutoCapture NoAutoPossessNoDotStarAnchorNoStartOptimizeNotBolNotEmptyNotEmptyAtStartNotEol OffsetLimit ParensLimit PartialHard PartialSoft SubGlobal SubLiteralSubReplacementOnlySubUnknownUnset SubUnsetEmptyUcpUngreedyUnsafeCompileRecGuard UnsafeCallout AutoCalloutUnsafeSubCalloutcaptures capturesOptmatches matchesOptmatchmatchOptsubgsubsubOpt _captures _capturesOpt_match _matchOpt defaultBsrcompiledWidthsdefaultDepthLimitdefaultHeapLimit supportsJit jitTargetlinkSizedefaultMatchLimitdefaultNewlinedefaultIsNeverBackslashCdefaultParensLimitdefaultTablesLengthunicodeVersionsupportsUnicode pcreVersionversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameconstantgetterCaptNumbase GHC.TypeLits TypeError CapturesInfo FromMatch_capturesInternalData.Traversable TraversableGHC.BaseNonEmptyData.Functor.IdentityIdentity Data.ProxyProxy CalloutState MatchTempEnvMatchEnvCodeMatcherSubber CompileEnvcompileEnvERef ExtractOptsMonad AppliedOptionMonoidmempty NoOptions TwoOptions<>GHC.EnummaxBound GHC.IO.UnsafeunsafePerformIOStream StreamYield StreamEffect StreamStopCastCUsGHC.PtrcastPtrwithForeignOrNullPtrForeign.ForeignPtr.ImpwithForeignPtr GHC.MaybeMaybe mkForeignPtrPtrmkFunPtrFunPtrfix1fix2fix3 thinSlice text-1.2.3.2Data.Text.InternalTextempty smartSlicemapMSunsafeLazyStreamToListbsrFromCbsrToC newlineFromC newlineToC applyOption extractOptsOfextractCompileEnv extractCodeextractMatchEnvassembleSubjFunassembleMatcherassembleSubbermkMatchTempEnvgetCalloutInfogetSubCalloutInfo maybeRethrowgetWhitelistedSlices get0thSlice getAllSlices nilFromMatchhas Alternative:|predictCaptureNamesgetCaptureNames getCodeInfogetErrorMessagecheckgetConfigNumericgetConfigStringcalloutStateExceptioncalloutStateSubsLogmatchTempEnvRefmatchTempEnvCtxmatchEnvSubCalloutmatchEnvCallout matchEnvCtx matchEnvOpts matchEnvCode compileEnvCtxMatchContextOptionSubCalloutOption CalloutOption MatchOptionCompileRecGuardOptionCompileContextOptionCompileExtraOption CompileOption MatchData MatchContextCompileContext StreamPureGetting Traversal'Lens'castCUsSlice FfiWrapper mkCalloutmkRecursionGuardsafeLastbitOrpreviewviewtotoListOftoAlternativeOf _Identity streamYield_CompileOption_CompileExtraOption_CompileContextOption_CompileRecGuardOption _MatchOption_CalloutOption_SubCalloutOption_MatchContextOptionglobalMatcherCache GHC.IORefIORef memoMatcherpredictCaptureNamesQtoKVsJust capturesInfoQmatchTH capturesTH matchesTHcapturesNumberedTH_matchTH _capturesTH