!zMTV      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU SafeVWXYZ[\]^_`abcdefgNone,-=>?@ACHSUVXhaskus-utils-data"Bottom-up traversal (catamorphism)haskus-utils-data6Bottom-up traversal with original value (paramorphism)haskus-utils-dataPerform a top-down traversalmRight: stop the traversal ("right" value obtained) Left: continue the traversal recursively on the new valuehijklmnopqrstuvwxyz{|}~#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPWVUTSRQ]\[ZYX_^a`cbdefghijklmnopqrstuvwxyz{|}~l#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPWVUTSRQ]\[ZYX_^a`cb~}|{zyxwvutsrqpnolmjkghidefSafe46haskus-utils-dataAn infinite listhaskus-utils-dataConvert to a standard listhaskus-utils-dataTake for infinite listhaskus-utils-dataRepeat for infinite listhaskus-utils-dataReplicate for infinite listSafeX/ haskus-utils-dataSafely index into a list[0,1,2,3] `at` 10Nothing[0,1,2,3] `at` 2Just 2haskus-utils-dataUnsafe a[0,1,2,3] `unsafeAt` 22haskus-utils-data?Check that a list has the given length (support infinite lists)haskus-utils-data Replicatehaskus-utils-dataTakehaskus-utils-dataLengthhaskus-utils-dataDrophaskus-utils-data\Split a list into chunks of a given size. The last chunk may contain fewer than n elements.haskus-utils-dataAPick each element and return the element and the rest of the listpick1 [1,2,3,4]1[(1,[2,3,4]),(2,[1,3,4]),(3,[1,2,4]),(4,[1,2,3])]haskus-utils-data'Get members of a bounded enum in a list:set -XTypeApplications9data Letters = A | B | C | D deriving (Bounded,Enum,Show)enumList @Letters [A,B,C,D]haskus-utils-data1Zip left with something extracted from each valuezipLeftWith odd [0..5]:[(False,0),(True,1),(False,2),(True,3),(False,4),(True,5)]haskus-utils-data2Zip right with something extracted from each valuezipRightWith odd [0..5]:[(0,False),(1,True),(2,False),(3,True),(4,False),(5,True)]-  -    Safe1      Safe3} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO Safe_8haskus-utils-dataFlipped Phaskus-utils-dataFlipped haskus-utils-datafromMaybe in a Monadhaskus-utils-data3Get the head of the list if the latter is not emptyQRSTUVWPXYZ[SafeHSVX;hhaskus-utils-data0Lift with*-like functions into IO (alloca, etc.)haskus-utils-data0Lift with*-like functions into IO (alloca, etc.)O\]^_`abcdefghijklmnopqrstuvwxyz{|}~None-.=>?@ACFHUVXkGhaskus-utils-data Unboxed tupleTODO: put this family into GHChaskus-utils-data Boxed tupleTODO: put this family into GHChaskus-utils-dataCreate a Tuplehaskus-utils-dataCreate a Tuplehaskus-utils-dataReorder tuple elementshaskus-utils-dataReorder tuple elementshaskus-utils-data Extract a tuple value staticallyhaskus-utils-data)Extract a tuple value by type-level indexhaskus-utils-dataUncurry3haskus-utils-dataUncurry4haskus-utils-dataUncurry5haskus-utils-dataUncurry6haskus-utils-dataUncurry7haskus-utils-dataTake specialised for quadruplehaskus-utils-datatoList for quadruplehaskus-utils-dataGet first element of the tuple"!"!None,.1=>?@ACHUVXkS haskus-utils-data!Convert between hlists and tupleshaskus-utils-data*Convert an heterogeneous list into a tuplehaskus-utils-data*Convert a tuple into an heterogeneous list#haskus-utils-data+Like HFoldl but only use types, not values!TIt allows us to foldl over a list of types, without any associated hlist of values.'haskus-utils-data+Like HFoldr but only use types, not values!TIt allows us to foldr over a list of types, without any associated hlist of values.+haskus-utils-dataGApply the function identified by the data type f from type a to type b..haskus-utils-dataHeterogeneous list1haskus-utils-dataHead2haskus-utils-dataTail3haskus-utils-dataLength !"#$%&'()*+,-.0/123.0/123-'(#$+,!")*%& /2                  ! " # $ % & '( ') '* '+ ',-./-.0-.1-.234534567867967:67;67<67=67>67?67@67A67B67C67D67E67F67G67H67I67J67K67L67M67N67O67P67Q67R67S67T67U67V67W67X67Y67Z67[67\67]67^67_67`67a67b67c67d67e67f67g67h67i67j67k67l67m67n67o67p67q67r67s67s67t67t67u67uvwxyz{|}~*      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd ef eg eh ei ej ek el em en eo ep-qr-qs-qt-qu-qv-qw-qx yz y{ y| y} y~ y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y ya/      !"#$%&'() *+,------------------------------------- -------------$ ./ 01 02 03 . .4 .5 .6 .7 .8 .9 .: ;< = > ? @ A B C D EF EG HI HJ ;K ;L ;M ;N ;O ;P ;Q ;R ;S ;T ;U ;V ;W ;X EY Z [ \ ] ^_ ` a b c d e f g h i j-kl-km-kn-ko-kp-kq-kr-ks-kt-ku-kv-kw-kx-ky-kz-k{-k|-k}-k~-k-k-k-k-k-k-k-k-k-k-k     ,haskus-utils-data-1.2-3yLsmiCrEkg6TbgS0uXRZbHaskus.Utils.ListHaskus.Utils.TupleHaskus.Utils.FunctorHaskus.Utils.InfListHaskus.Utils.MaybeHaskus.Utils.MonadHaskus.Utils.HListHaskus.Utils.EitherHaskus.Utils.MapHaskus.Utils.Map.StrictbaseGHC.Base++ Data.FoldablefindnotElemelemfoldl' Data.OldListsortOnsortBysortgroupByzip7zip6zip5zip4 partition transpose intersperse intersect\\deleteBynubBynub isSuffixOf isPrefixOf stripPrefixGHC.ListzipWithzip3repeattailhead#extra-1.6.18-FXm1noGDYMG2ZbkC67vj2WData.List.ExtrasplitsplitOnnubOngroupOnghc-prim GHC.TupleUnit.recursion-schemes-5.1.3-9rjeTImajhbLDDyfGt1V78Data.Functor.Foldable cotransverse transversecataAzygoHistoPreprocoelgotelgotmhistomcatagchronochrono distGHisto distHistoghistohisto distGApoTdistGApodistApogapo distZygoTgzygodistZygozygohoistNuhoistMurefixhoistunfix distGFutudistFutugfutufutugrefoldghylodistAnagunfoldganadistCatagfoldgcatarefoldunfoldfoldhylo distParaTdistParaBasegprepropreprogparaparacataproject Recursivegpostpropostproapoanaembed CorecursiveFixMuNu HCorecursivehembedhana HRecursivehprojecthcata HTraversable htraverse HFoldablehfoldMapHFunctorhfmap HGCoalgebraM HGCoalgebra HCoalgebraM HCoalgebra HGAlgebraM HGAlgebra HAlgebraMHAlgebraHBaseNatM~> RCoAlgebraRAlgebra CoAlgebraAlgebra TopDownStopT BottomUpOrigT BottomUpTbottomUp bottomUpOrig topDownStophhylohcataMhlambekhparahparaMhanaM hcolambekhapohapoMhhyloMInfList:>toListtake replicate$fFunctorInfList$fFoldableInfListatunsafeAt checkLengthlengthdropchunksOfpick1enumList zipLeftWith zipRightWith onNothing onNothingM fromMaybeM headMaybe MonadInIOliftWith liftWith2$fMonadInIOStateT $fMonadInIOIOTuple#TypeRepsTupleTupleContupleCon ReorderTuple tupleReorder TupleCons tupleCons TupleTail tupleTail ExtractTupletupleNuncurry3uncurry4uncurry5uncurry6uncurry7take4 fromTuple4 tupleHead$fTupleTail(,,,,,)(,,,,)$fTupleTail(,,,,)(,,,)$fTupleTail(,,,)(,,)$fTupleTail(,,)(,)$fTupleTail(,)Unit$fTupleConsa(,,,,)(,,,,,)$fTupleConsa(,,,)(,,,,)$fTupleConsa(,,)(,,,)$fTupleConsa(,)(,,)$fTupleConsaUnit(,)$fReorderTuple(,,,,,,)(,,,,,,)$fReorderTuple(,,,,,,)(,,,,,,)0$fReorderTuple(,,,,,,)(,,,,,,)1$fReorderTuple(,,,,,,)(,,,,,,)2$fReorderTuple(,,,,,,)(,,,,,,)3$fReorderTuple(,,,,,,)(,,,,,,)4$fReorderTuple(,,,,,,)(,,,,,,)5$fReorderTuple(,,,,,)(,,,,,)$fReorderTuple(,,,,,)(,,,,,)0$fReorderTuple(,,,,,)(,,,,,)1$fReorderTuple(,,,,,)(,,,,,)2$fReorderTuple(,,,,,)(,,,,,)3$fReorderTuple(,,,,,)(,,,,,)4$fReorderTuple(,,,,)(,,,,)$fReorderTuple(,,,,)(,,,,)0$fReorderTuple(,,,,)(,,,,)1$fReorderTuple(,,,,)(,,,,)2$fReorderTuple(,,,,)(,,,,)3$fReorderTuple(,,,)(,,,)$fReorderTuple(,,,)(,,,)0$fReorderTuple(,,,)(,,,)1$fReorderTuple(,,,)(,,,)2$fReorderTuple(,,)(,,)$fReorderTuple(,,)(,,)0$fReorderTuple(,,)(,,)1$fReorderTuple(,,)(,,)2$fReorderTuple(,,)(,,)3$fReorderTuple(,)(,)$$fReorderTuple(,,,,,,,,,)(,,,,,,,,,)"$fReorderTuple(,,,,,,,,)(,,,,,,,,) $fReorderTuple(,,,,,,,)(,,,,,,,)$fReorderTuple(,,,,,,)(,,,,,,)6$fReorderTuple(,,,,,)(,,,,,)5$fReorderTuple(,,,,)(,,,,)4$fReorderTuple(,,,)(,,,)3$fReorderTuple(,,)(,,)4$fReorderTuple(,)(,)0$fReorderTupleUnitUnit $fTupleCon: $fTupleCon:0 $fTupleCon:1 $fTupleCon:2 $fTupleCon:3 $fTupleCon:4 $fTupleCon[]$fExtractTuple7:$fExtractTuple6:$fExtractTuple5:$fExtractTuple4:$fExtractTuple3:$fExtractTuple2:$fExtractTuple1:$fExtractTuple0:$fExtractTuple6:0$fExtractTuple5:0$fExtractTuple4:0$fExtractTuple3:0$fExtractTuple2:0$fExtractTuple1:0$fExtractTuple0:0$fExtractTuple5:1$fExtractTuple4:1$fExtractTuple3:1$fExtractTuple2:1$fExtractTuple1:1$fExtractTuple0:1$fExtractTuple4:2$fExtractTuple3:2$fExtractTuple2:2$fExtractTuple1:2$fExtractTuple0:2$fExtractTuple3:3$fExtractTuple2:3$fExtractTuple1:3$fExtractTuple0:3$fExtractTuple2:4$fExtractTuple1:4$fExtractTuple0:4$fExtractTuple1:5$fExtractTuple0:5$fExtractTuple0:6HTuplehToTuple hFromTupleHReversehReverseHZipListhZipListHFoldl'hFoldl'HFoldlhFoldlHFoldr'hFoldr'HFoldrhFoldrApplyapplyhAppendHListHConsHNilhHeadhTailhLength $fShowHList $fShowHList0$fHAppendList:l'$fHAppendList[]l2 $fHFoldrfv:r'$fHFoldrfv[]v'$fHFoldr'fv:r'$fHFoldr'fv[]v'$fHFoldlfz[]z' $fHFoldlfz:r$fHFoldl'fz[]z' $fHFoldl'fz:r $fHZipList:::$fHZipList[][][] $fHRevApp:l'z$fHRevApp[]l2l2$fHReversexssx $fHTuple: $fHTuple:0 $fHTuple:1 $fHTuple:2 $fHTuple:3 $fHTuple:4 $fHTuple:5 $fHTuple:6 $fHTuple:7 $fHTuple:8 $fHTuple:9 $fHTuple:10 $fHTuple[] $fOrdHList $fOrdHList0 $fEqHList $fEqHList0 Data.EitherEitherLeftRight fromRightfromLeftisRightisLeftpartitionEithersrightsleftseitherData.Either.ExtramapRightmapLeft eitherToMaybe maybeToEither fromEither fromRight' fromLeft'Data.Functor.Classes showsBinary1 showsUnary1 showsUnary readsBinary1 readsUnary1 readsUnaryshowsBinaryWithshowsUnaryWithreadBinaryWithreadsBinaryWith readUnaryWithreadsUnaryWithreadData readsData showsPrec2liftReadListPrec2DefaultliftReadList2Default readPrec2 readsPrec2compare2eq2 showsPrec1liftReadListPrecDefaultliftReadListDefault readPrec1 readsPrec1compare1eq1Eq1liftEqOrd1 liftCompareRead1 liftReadsPrec liftReadList liftReadPrecliftReadListPrecShow1 liftShowsPrec liftShowListEq2liftEq2Ord2 liftCompare2Read2liftReadsPrec2 liftReadList2 liftReadPrec2liftReadListPrec2Show2liftShowsPrec2 liftShowList2containers-0.6.0.1Data.Map foldWithKeyinsertLookupWithKey'insertWithKey' insertWith'$Data.Map.Internal.DeprecatedShowTree showTreeWithshowTreeData.Map.Internal.DebugvalidData.Map.Internal splitRoot deleteFindMax deleteFindMin splitLookupfromDistinctDescListfromDistinctAscListfromDescListWithKeyfromAscListWithKeyfromDescListWithfromAscListWith fromDescList fromAscList toDescList toAscListfromListWithKey fromListWithfromListfromSetkeysSetassocskeyselemsfoldMapWithKey foldlWithKey' foldlWithKey foldrWithKey' foldrWithKeyfoldlfoldr'foldrmapKeysMonotonic mapKeysWithmapKeysmapAccumRWithKeymapAccumWithKeymapAccumtraverseWithKey mapWithKeymapmapEitherWithKey mapEithertraverseMaybeWithKeymapMaybeWithKeymapMaybepartitionWithKey spanAntitonedropWhileAntitonetakeWhileAntitone filterWithKeyfilterisProperSubmapOfByisProperSubmapOf isSubmapOfBy isSubmapOf mergeWithKeyintersectionWithKeyintersectionWith restrictKeys intersectiondifferenceWithKeydifferenceWith withoutKeys difference unionWithKey unionWithunion unionsWithunionsmaxViewminViewmaxViewWithKeyminViewWithKeyupdateMaxWithKeyupdateMinWithKey updateMax updateMin deleteMax deleteMinfindMax lookupMaxfindMin lookupMindeleteAtupdateAtsplitAtelemAt lookupIndex findIndexalterFalterupdateLookupWithKey updateWithKeyupdate adjustWithKeyadjustdeleteinsertLookupWithKey insertWithKey insertWithinsert singletonemptylookupGElookupLElookupGTlookupLTfindWithDefault notMembermemberlookupsizenull!?!MapData.Map.Strict.Internal Data.Maybe fromMaybe GHC.MaybeMaybeNothingJust catMaybes listToMaybe maybeToListfromJust isNothingisJustmaybe Control.MonadguardjoinMonad>>=>>returnfailFunctorfmapData.TraversablemapMsequenceControl.Monad.IO.ClassMonadIOliftIOmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforMmsum sequence_forM_mapM_ Data.FunctorvoidapliftM5liftM4liftM3liftM2liftMwhen=<< MonadPlusmzeromplusControl.Monad.Extra firstJustMfindMandMorMallManyM&&^||^notMifMunlessMwhenMwhileMloopMloop mapMaybeM mconcatMapM concatForM concatMapM partitionMfold1M_fold1MeitherMmaybeMunit whenMaybeM whenMaybe whenJustMwhenJusttransformers-0.5.5.0Control.Monad.Trans.Class MonadTranslift Data.Tuplefstsndswapuncurrycurry