!c      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      None(-6 haskus-utils)Embed bytes in a C array, return an Addr#7 haskus-utils.Adapted from the raw-strings-qq package (BSD3)}A quasiquoter for raw string literals - that is, string literals that don't recognise the standard escape sequences (such as '\n'). Basically, they make your code more readable by freeing you from the responsibility to escape backslashes. They are useful when working with regular expressions, DOS/Windows paths and markup languages (such as XML).Don't forget the LANGUAGE QuasiQuotes1 pragma if you're using this module in your code.Usage:  ghci> :set -XQuasiQuotes ghci> import Text.RawString.QQ ghci> let s = [raw|\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}|] ghci> s "\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}" ghci> [raw|C:\Windows\SYSTEM|] ++ [raw|\user32.dll|] "C:\\Windows\\SYSTEM\\user32.dll" 1Multiline raw string literals are also supported:  multiline :: String multiline = [raw|<HTML> <HEAD> <TITLE>Auto-generated html formated source</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> </HEAD> <BODY LINK="0000ff\" VLINK=\"4800080" BGCOLOR="#ffffff"> <P> </P> <PRE>|] Caveat: since the "|]"q character sequence is used to terminate the quasiquotation, you can't use it inside the raw string literal. Use 8D if you want to embed that character sequence inside the raw string.8 haskus-utils A variant of 7 that interprets the "|~]" sequence as "|]", "|~~]" as "|~]" and, in general, "|~^n]" as  "|~^(n-1)]" for n >= 1.Usage: j ghci> [rawQ||~]|~]|] "|]|]" ghci> [rawQ||~~]|] "|~]" ghci> [rawQ||~~~~]|] "|~~~]"  !"#$%&678678None-)9 haskus-utilsApply a function: haskus-utilsApply a function; haskus-utilsApply a function in a Functor< haskus-utilsApply a function in a Functor= haskus-utilsApply a function in a Functor> haskus-utilsApply a function in a Functor? haskus-utils!Composition of catMaybes and forM "! '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9:;<=>?$"! 9:;<=>  ?  90:0;0<0=0>0None,.>EHIUVXk=C haskus-utilsA type t is maybe indexable in the arrayD haskus-utilsA type t is indexable in the arrayE haskus-utils The type t with index n is indexable in the arrayF haskus-utilsheterogeneous arrayG haskus-utils Empty arrayH haskus-utils Empty arrayI haskus-utilsGet an element by indexJ haskus-utilsGet first elementK haskus-utilsSet an element by indexL haskus-utils<Get an element by type (select the first one with this type)M haskus-utils<Set an element by type (select the first one with this type)N haskus-utils<Get an element by type (select the first one with this type)O haskus-utils!Append a value to an array (O(n))P haskus-utils"Prepend a value to an array (O(n))Q haskus-utils Concat arraysR haskus-utilsDrop the last elementS haskus-utilsDrop the first elementT haskus-utilsCompose HArrayT@ABCDEFGHIJKLMNOPQRSTFEDCGHIJKLMNOPQRS@ABTNone .>EHUVXH'U haskus-utils Multi-stateV haskus-utilsMulti-state monad transformer,States are stacked in a heterogeneous array.W haskus-utils Run MStateX haskus-utilsEvaluate MStateY haskus-utilsExecute MStateZ haskus-utilsSet a value in the state[ haskus-utilsGet a value in the state\ haskus-utilsTry to get a value in the state] haskus-utilsModify a value in the state^ haskus-utils,Modify a value in the state (strict version)_ haskus-utils(Execute an action with an extended state` haskus-utils-Lift a multi-state into an HArray transformera haskus-utilsCompose MStateTb haskus-utilsCompose MStateTUVWXYZ[\]^_`abVUZ[\]^_WXY`abNone.=>?@AEHUVXk_ e haskus-utils Parser errorh haskus-utilsTry to apply the actions in the list in order, until one of them succeeds. Returns the value of the succeeding action, or the value of the last one. Failures are detected with values of type  ParseError.i haskus-utilsTry to apply the actions in the list in order, until one of them succeeds. Returns the value of the succeeding action, or the value of the last one. Failures are detected with values of type "a".j haskus-utilsLApply the action zero or more times (until a ParseError result is returned)k haskus-utilsVApply the action zero or more times (up to max) until a ParseError result is returnedl haskus-utilsVApply the action zero or more times (up to max) until a ParseError result is returnedm haskus-utilsVApply the action zero or more times (up to max) until a ParseError result is returnedn haskus-utilsXApply the action at least n times or more times (until a ParseError result is returned)o haskus-utils{Apply the first action zero or more times until the second succeeds. If the first action fails, the whole operation fails.9Return both the list of first values and the ending valuep haskus-utils{Apply the first action zero or more times until the second succeeds. If the first action fails, the whole operation fails.$Return only the list of first valuesq haskus-utils Apply the given action at least min times and at most max timeOn failure, fails.cdefghijklmnopqefgcdhiqklmjnopSafec+u haskus-utils%Execute an STM transaction atomicallyv haskus-utilsRead a TVar in an IO monadw haskus-utilsCreate a broadcast channelx haskus-utils Create a TVary haskus-utilsCreate a TMVar#$%&'()*+,-./012345uvwxyuxv#%$0y&/.)-+'(*,5w4312Nonei z haskus-utilsSetter for a future value{ haskus-utilsFuture value of type a| haskus-utilsCreate a Future and its source} haskus-utils| in ~ haskus-utils Set a future haskus-utilsSet a future in IO haskus-utils Set a future'Return False if it has already been set haskus-utilsWait for a future haskus-utils Poll a future haskus-utils in  z{|}~ {z|}~SafejG NoneX_  haskus-utilsA node in the listEvery list has a marker node whose value is Nothing. Its nodePrev links to the last node and its nodeNext links to the first node. haskus-utilsA double linked-list haskus-utils Get value associated with a node haskus-utilsEmpty node singleton haskus-utils*Remove all the elements of the list (O(1)) haskus-utilsCreate a singleton list haskus-utilsIndicate if the list is empty haskus-utils/Count the number of elements in the list (0(n)) haskus-utilsGet the first element if any haskus-utilsGet the last element if any haskus-utilsGet the previous element if any haskus-utilsGet the next element if any haskus-utilsDelete a element of the list haskus-utils)Insert a node between two adjacent nodes. haskus-utilsAppend an element to the list haskus-utilsAppend an element to the list haskus-utilsPrepend an element to the list haskus-utilsPrepend an element to the list haskus-utils Insert an element before another haskus-utilsInsert an element after another haskus-utilsConvert into a list (O(n)) haskus-utils#Convert into a reversed list (O(n)) haskus-utilsCreate from a list haskus-utils(Only keep element matching the criterium haskus-utils3Find the first node matching the predicate (if any) haskus-utilsGet the node from its index haskus-utils5Take (and remove) up to n elements in the list (O(n)) None_ haskus-utils@A node contains a value and two lists of incoming/outgoing edges haskus-utilsDeep-first graph traversalubefore is executed when the node is entered after is executed when the node is leaved children gets node's children haskus-utilsBreadth-first graph traversalsvisit is executed when the node is entered. If False is returned, the traversal ends children gets node's children haskus-utilsCreate a graph node haskus-utilsLink two nodes together None,o haskus-utils STM hashmap haskus-utilsIndicate if the map is empty haskus-utils%Get the number of elements in the map haskus-utils)Lookup an element in the map from its key haskus-utilsCheck if a key is in the map haskus-utils Check if a key is not in the map haskus-utilsCreate an empty map haskus-utils(Create a map containing a single element haskus-utilsInsert an element in the map haskus-utilsCreate a new TMap from a list haskus-utilsDelete an element from the map haskus-utilsCreate a list of (key,value) haskus-utils Get values haskus-utilsGet keys haskus-utilsUnsafe lookup in the map None, haskus-utilsSTM Set haskus-utilsIndicate if the set is empty haskus-utilsNumber of elements in the set haskus-utils!Check if an element is in the set haskus-utils%Check if an element is not in the set haskus-utilsCreate an empty set haskus-utils(Create a set containing a single element haskus-utilsInsert an element in a set haskus-utilsDelete an element from a set haskus-utilsConvert a set into a list haskus-utilsCreate a set from a list haskus-utilsGet the set elements haskus-utilsGet the set as a ListT stream haskus-utilsPerform a set union haskus-utils+Apply a function to each element in the set None  haskus-utilsPath in the tree haskus-utilsA STM mutable tree haskus-utilsNode identifier haskus-utils Node value haskus-utilsChildren haskus-utilsParent haskus-utilsCreate a singleton node haskus-utils Add a child haskus-utilsDetach a child haskus-utilsEAttach a child a node (detaching it from a previous one if necessary) haskus-utils Follow a path from a parent node None =>?HPVX_`ҁ% haskus-utilsReduction result haskus-utilsPredicated data }data T data NT type family RuleT e p a s :: * where RuleT e p a T = a RuleT e p a NT = Rule e p a data PD t = PD { p1 :: RuleT () Bool Int t , p2 :: RuleT () Bool String t } deriving instance Eq (PD T) deriving instance Show (PD T) deriving instance Ord (PD T) deriving instance Eq (PD NT) deriving instance Show (PD NT) deriving instance Ord (PD NT) instance Predicated (PD NT) where type PredErr (PD NT) = () type Pred (PD NT) = Bool type PredTerm (PD NT) = PD T liftTerminal (PD a b) = PD (liftTerminal a) (liftTerminal b) reducePredicates oracle (PD a b) = initP PD PD |> () reducePredicates oracle a) |> (p reducePredicates oracle b) |> resultP getTerminals (PD as bs) = [ PD a b | a <- getTerminals as , b <- getTerminals bs ] getPredicates (PD a b) = concat [ getPredicates a , getPredicates b ]  haskus-utils Error type haskus-utilsPredicate type haskus-utils Terminal type haskus-utils$Build a non terminal from a terminal haskus-utilsReduce predicates haskus-utils Get possible resulting terminals haskus-utilsGet used predicates haskus-utilsPredicate oracle haskus-utilsPredicate state haskus-utils Set predicate haskus-utilsUnset predicate haskus-utilsUndefined predicate haskus-utils#Ask an oracle if a predicate is set haskus-utils%Ask an oracle if a predicate is unset haskus-utils)Ask an oracle if a predicate is undefined haskus-utilsCheck the state of a predicate haskus-utilsGet predicate state haskus-utilsCreate an oracle from a list haskus-utils'Get a list of predicates from an oracle haskus-utilsOracle that always answer Undef haskus-utilsReduce a constraint haskus-utils=Check that a constraint is evaluated to a given boolean value haskus-utils#Get predicates used in a constraint haskus-utilsGet constraint terminals haskus-utils4NonTerminal whose constraints are evaluated in orderKEarlier constraints must be proven false for the next ones to be considered haskus-utilsSimplify a constraint haskus-utilsMerge two rules together haskus-utils Reduce a rule haskus-utils Get possible resulting terminals haskus-utilsGet predicates used in a rule haskus-utilsFConstraint checking that a predicated value evaluates to some terminal haskus-utilsCompose reduction resultsWe reuse the MatchResult data type: * a "terminal" on the left can be used to build either a terminal or a non terminal * a "non terminal" on the left can only be used to build a non terminal haskus-utilsIInitialise a reduction result (typically with two functions/constructors) haskus-utils#Fixup result (see initP and applyP) haskus-utils3Create a table of predicates that return a terminal// ! " #$%$&$'$($)$*+,+-./012345645745845945:;<=;<>;<?@AB@AC@AD@EF@EG@EH@EI@EJ@EK@EL@EM@EN@EO@EP@QR@QS@QT@QU@QVWXYZ[\]^_`aabcdefghijklmnopqrstuvwxyz{|}~                   ! " # $ % & ' ( ) * + , - . / 0 123423567867967:67;67<67=67>67?67@67A67B67C67D67E67F67G67H67I67J67K67L67M67N67O6PQ6PR6PS6PT6PU6PV6PW6PX6PY6PZ6P[6P\6P]6P^6P_6P`6Pa6Pb6Pc6Pd6Pe6Pf6Pg6Ph6Pi6Pj6Pk6Pl6Pm6Pn6Po6Pp6Pq6Pr6Ps6Pt6Pu6Pv6Pw6Px6Py6Pz6P{6P|6P}6P~6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P6P  'haskus-utils-1.4-38yGBD589sm6Yla3w1CWYqHaskus.Utils.FlowHaskus.Utils.STMHaskus.Utils.EmbedHaskus.Utils.HArrayHaskus.Utils.MultiStateHaskus.Utils.ParserHaskus.Utils.STM.FutureHaskus.Utils.STM.TEqHaskus.Utils.STM.TListHaskus.Utils.STM.TGraphHaskus.Utils.STM.TMapHaskus.Utils.STM.TSetHaskus.Utils.STM.TTreeHaskus.Utils.Solverbase Control.MonadguardGHC.BasejoinControl.Monad.IO.ClassliftIOMonadIOunless replicateM_ replicateMfoldM_foldMforever<=<>=>filterMData.TraversableforMsequencemapM GHC.Conc.Sync writeTVarreadTVarnewTVarretrySTMTVar Data.FoldableforM_mapM_ Data.Functorvoidwhentransformers-0.5.5.0Control.Monad.Trans.Classlift#extra-1.6.14-IBsj3L83KrNIF8k2eHkqe9Control.Monad.ExtraifMunlessMwhenMwhileMloopM.haskus-utils-data-1.1.1-7nHI7ZmT3ar67ZpMlBU56wHaskus.Utils.Monad liftWith2liftWith MonadInIO stm-2.5.0.0Control.Concurrent.STM.TVarswapTVar modifyTVar' modifyTVarControl.Concurrent.STM.TMVar isEmptyTMVar swapTMVar tryReadTMVar readTMVar tryPutTMVarputTMVar tryTakeTMVar takeTMVarnewEmptyTMVarIO newEmptyTMVarTMVarControl.Concurrent.STM.TChandupTChan readTChan writeTChannewBroadcastTChanTChan embedBytesrawrawQ|><|||><|||||><||| forMaybeMHArrayT runHArrayTHArrayTryIndexT HArrayIndexT HArrayIndexHArray emptyHArray singleHArray getHArrayN getHArray0 setHArrayN getHArrayT setHArrayT tryGetHArrayT appendHArray prependHArray concatHArray initHArray tailHArray>~:~>MStateMStateT runMState evalMState execMStatemSetmGetmTryGetmModifymModify'mWith liftMStateT>~:>>:>Choice ParseError SyntaxError EndOfInputchoicechoice'many manyAtMost manyAtMost' manyAtMost'' manyAtLeastmanyTill manyTill' manyBounded$fApplyChoice(,)z$fShowParseError$fEqParseError atomically readTVarIOnewBroadcastTChanIO newTVarIO newTMVarIO FutureSourceFuture newFuture newFutureIO setFuture setFutureIO setFuture' waitFuture pollFuture pollFutureIOTEqteq $fTEqTVarTNodeTListvalueempty deleteAll singletonnulllengthfirstlastprevnextdeleteappendappend_prependprepend_ insertBefore insertAftertoList toReverseListfromListfilterfindindextake nodeValue nodeEdgeIn nodeEdgeOut deepFirst breadthFirstlinkToTMapKeysizelookupmember notMemberinsertelemskeys!TSetElementstreamunionsmap TTreePathTTreetreeKey treeValue treeChildren treeParentaddChild detachChild attachChildtreeFollowPath MatchResultNoMatchMatch DontMatch MatchFail MatchDiverge PredicatedPredErrPredPredTerm liftTerminalreducePredicates getTerminals getPredicatesRuleTerminal NonTerminalFail Constraint PredicateNotAndOrXorCBool PredOracle PredStateSetPred UnsetPred UndefPred predIsSet predIsUnset predIsUndefpredIs predState makeOracleoraclePredicates emptyOracleconstraintReduceorderedNonTerminalsimplifyConstraint mergeRulesevalsToapplyPinitPresultPcreatePredicateTable$fFunctorConstraint $fFunctorRule$fFunctorMatchResult$fPredicatedConstraint$fPredicatedRule$fShowPredState $fEqPredState$fOrdPredState$fShowConstraint$fEqConstraint$fOrdConstraint $fShowRule$fEqRule $fOrdRule$fShowMatchResult$fEqMatchResult$fOrdMatchResult(file-embed-0.0.11-4IE3sw0bCLQ7xXwEGMUYkeData.FileEmbedmakeRelativeToProjectinjectFileWith injectFile injectWithinjectdummySpaceWith dummySpacestrToExpembedOneStringFileOfembedStringFile stringToBsbsToExpgetDirembedDirListingembedDirembedOneFileOf embedFile/haskus-utils-types-1.3.1-FZISrVbFhHx8KexT7EPBd6Haskus.Utils.Types.ListRemoveMember/haskus-utils-variant-2.5-HhOg0Ig5cVz89rx4mxO7tmHaskus.Utils.Variant.FlowvariantToFlowT finallyFlow onFlowError onFlowError_catchDieevalCatchFlowT catchAllEcatchLiftRight catchLiftLeft catchRemove catchLiftBothcatchEfailurethrowEsuccess liftFlowTmapFlowT evalFlowT injectFlowT runFlowT_runFlowTrunFlowFlowFlowTHaskus.Utils.VariantvariantToTuplevariantFromEithervariantToEithervariantFromValuevariantToValuejoinVariantUnsafeflattenVariantproductVariant nubVariant liftVariantprependVariant appendVariant reduceVarianttraverseVariant_traverseVariant alterVariantfoldMapVariantfoldMapVariantFirstMfoldMapVariantFirstfoldMapVariantAtMfoldMapVariantAt mapNubVariant mapVariantmapVariantFirstMmapVariantFirstfromVariantMaybe fromVariant' fromVariantfromVariantFirstpopVariantMaybe popVariant splitVariant toVariant' toVariantmapVariantHeadTailvariantHeadTailconstBindVariant bindVariant mapVariantAtM mapVariantAtpopVariantHead popVariantAtfromVariantHead fromVariantAt toVariantTail toVariantHead toVariantAt variantIndexVVSilentVMaybeVariant PopVariant popVariant' SplitVariant:<:<<: