B                 ! " # $ % & ' ()*+,-./0123456789:;<=>?@ASafeChecks that composing B & C is equivalent to the identity.SafeChecks that composing D & E is equivalent to the identity.SafeChecks that composing F & G is equivalent to the identity.Safe1Check whether the specified result is successful.SafeHHSafeIISafeJJSafefTime the specified pure expression, returning the required number of CPU-seconds and the result, as a Pair.,CAVEAT: as a side-effect, the expression is deep evaluated.9Print the time required by the specified pure expression.,CAVEAT: as a side-effect, the expression is deep evaluated.!Arbitrary polymorphic expression.;The original expression, tagged with the CPU-seconds taken.Safe`Time the specified IO-action, returning the required number of CPU-seconds and the result, as a Pair.3Print the time required by the specified IO-action.Safe=Constructs an infinite list of independent random-generators. .Shuffles the specified finite list, using the  Fisher-Yates algorithm;  1http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.dThe resulting list has the same length and constituents as the original; only the order has changed.<The input list is traversed, but the items aren't evaluated. hGenerate an infinite list of items, each independently randomly selected from the specified finite list.[CAVEAT: because the selections are made non-destructively, duplicates may be returned; cf.  . ;Return a randomly selected element from the specified list. aGenerate an infinite list of data, each independently selected random instances of the specified bounded type.E.g.  (generateSelectionFromBounded K' System.Random.getStdGen) :: IO [Bool] .    Safe +A file-path, and the contents read from it.9The ordered sequence of directories, searched for a file.When supplied with an absolute file-path, the  search-pathd is ignored and an exception is thrown if either the file-path is invalid or the file doesn't exist.If the specified file-name is relative*, all matching instances on the specified  search-path are returned.&CAVEAT: doesn't perform file-globbing. Accessor. Accessor. Traverse the  search-path, looking for matching instances of the specified file-name, and either throw an exception, or return a pair composed from the path to the first matching file, together with its contents.GReturns the polymorphic data, read from the first matching file on the  search-path-, along with the path from which it was read.ZReturns an error on failure to parse the contents of the first matching file found on the  search-path.     SafeCThe interface to which data which can self-validate should conform.9Returns the first error only (so only call on failure of 7), since subsequent tests may be based on invalid data./Extracts the failed tests from those specified. ;Return either null, or the reasons why the data is invalid.7The data which implements this interface should return L if internally consistent.MNOPQRS MNOPQRS SafeAAn interface to which data which have a default-value can adhere.#The default value of the data-type.TUTU SafeSimilar to the class .The  undefinedc state of the data-type, which may be literal, but could alternatively be a logical starting value. SafeExtends the concept of .Extends the concept of .1Access the first datum from the specified triple. 2Access the second datum from the specified triple.!1Access the third datum from the specified triple. ! ! ! ! Safe"Extends the concept of .#Extends the concept of .$4Access the first datum from the specified quadruple.%5Access the second datum from the specified quadruple.&4Access the third datum from the specified quadruple.'5Access the fourth datum from the specified quadruple."#$%&'"#$%&'"#$%&'"#$%&'Safe(2Apply the same transformation to both halves of a Pair.bCAVEAT: even though the function may be polymorphic, the pair is required to have identical types.((((SafeVHThe polymorphic pair, resulting from splitting a list of arbitrary type.W8Use the specified transformation, to generate a list of Vs, from the initial one.)Create the set of all V.s, migrating left from the specified location.CAVEAT: X fails when Y has been reduced to null.*Create the set of all V/s, migrating right from the specified location.CAVEAT: pattern-match against  :  fails, when Z has been reduced to [.VW#The function used to transform one split into the next.Index.*The polymorphic input list from which the splits are generated.9The list of all required splits of the single input list.)Index.*The polymorphic input list from which the splits, are generated, as the index is stepped left9The list of all required splits of the single input list.*Index.*The polymorphic input list from which the splits. are generated, as the index is stepped right.9The list of all required splits of the single input list.)*)*VW)*Safe+:Describes the number of consecutive equal items in a list., Accessor.- Accessor.. Run-length encodes the specified list./ Performs  run-length2 decoding to retrieve the original unencoded list.+,-./+,-./+./,-+,-./None0!The type of function required by 5, 7.14The length of the chunks into which a list is split.22Splits a list into chunks of the specified length.cThe last chunk will be shorter, if the chunk-length isn't an aliquot part of the input list-length.[If the chunk-length is zero, the resulting list will be an infinite sequence of null lists.6CAVEAT: a similar function is available in the module Data.List.Split, though this one checks for (chunkLength < 0).30Remove the single indexed element from the list.4 A convenient way to compose the 0-function required by 5 & 7.5Take the first element from the (potentially infinite) list, which matches the subsequent element, according to the specified function.6A specific instance of 5.7The list of all permutations, generated by selecting any one datum from each sub-list in turn, from the specified list of lists.VAs each item is selected, the remaining lists are filtered according to the specified 0 -function.Thus \9 could be used to select a different item from each list.8The list of all permutations, generated by selecting any one datum from each sub-list in turn, from the specified list of lists.A specific instance of 7U, in which no filtering of subsequent lists is performed after each item is selected.NB: differs from ]/, which selects items from a single input list.9A strict version of ^ with better time-complexity.jCAVEAT: the specified list must be finite, since the entire set is constructed before streaming to a list.aCAVEAT: it sorts the output as a side-effect, & consequently it requires a type which implements _.`A specialisation for type a.:Converts a list of Pairs, into a narrower list.;ZMerge two sorted lists, according to the specified order, to product a single sorted list.The merge-process is stableR, in that where items from each list are equal, they remain in the original order.!CAVEAT: duplicates are preserved.<A specific instance of ;.=1Take until the specified predicate is satisfied;  including the item which satisfied it.NB: takeWhile (not . test) would return one fewer item.>/Show a list, delimited by the specified tokens.bA specialisation of >.cA specialisation of >.012)The polymorphic input list to be chunked.3 The index.The polymorphic input list.0The same list, with the indexed element removed.456789`:;<=1Predicate, used to determine the last item taken.The polymorphic input list.>+(Start-delimiter, separator, end-delimiter)The polymorphic list to show.bc0123456789:;<=>1023465:<;987=>0123456789`:;<=>bcSafe?2Group equal (though not necessarily adjacent; cf. 2) elements, according to the specified comparator.aThe groups are returned in ascending order, whilst their elements remain in their original order.@A specific instance of ?.A:Whether the specified collection contains any equal items.?@A?@A@?A?@Ad  !"#$%&'()*+, - . / 0 1 2 3 4 5 6 7 8 9 : ; < 8 9 : =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZX[\X]^X]_X]`X]abcdXefghi j k l m n o p q rstXuvXwXxXyzg{|X}NX}~g{ghtools_FlK3AT0QV0hEPCPJySJBVYToolShed.Test.ReversibleIOToolShed.Test.ReversibleEnum#ToolShed.Test.ReversibleBoundedEnumToolShed.Test.QuickCheck.ResultToolShed.System.TimePureToolShed.System.TimeActionToolShed.System.RandomToolShed.System.FileToolShed.SelfValidateToolShed.DefaultableToolShed.OptionsToolShed.Data.TripleToolShed.Data.QuadrupleToolShed.Data.PairToolShed.Data.List.SplitsToolShed.Data.List.RunlengthToolShed.Data.ListToolShed.Data.Foldable&ToolShed.Test.QuickCheck.Arbitrary.Set&ToolShed.Test.QuickCheck.Arbitrary.Map(ToolShed.Test.QuickCheck.Arbitrary.ArrayText.Regex.Base.RegexLike RegexOptions Data.Tuplecurryuncurry Data.ListgroupBy isReversible isSuccessful getCPUSecondsprintCPUSeconds randomGensshufflegenerateSelectionselectgenerateSelectionFromBounded LocatedData SearchPathlocate getFilePathgetDatagetFilefromFile SelfValidator getErrorsisValid getFirstError extractErrors Defaultable defaultValueOptions blankValuecurry3uncurry3getFirst getSecondgetThirdcurry4uncurry4 getFourthmirrorsplitsLeftFromsplitsRightFromCode getLengthgetDatumencodedecodeMatches ChunkLengthchunkexcise equalityByfindConvergenceByfindConvergencepermutationsBy permutationsnub' linearisemergeBymerge takeUntil showListWithgatherBygather hasDuplicatesbase Text.ReadreadGHC.ShowshowGHC.EnumtoEnumfromEnumpredsucc$fArbitrarySet$fArbitraryMap$fArbitraryArrayGHC.Basefmapghc-prim GHC.TypesTrue$fSelfValidatorArray$fSelfValidatorMap$fSelfValidatorSet$fSelfValidator[]$fSelfValidator(,,)$fSelfValidator(,)$fSelfValidatorMaybe$fDefaultable(,,)$fDefaultable(,)Split splitsFromGHC.Listinitfstsnd Data.Foldablenull GHC.Classes/= Data.OldListnubOrd nubWithIntIntshowListWithCharshowListWithString