úÎuŽn…      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„(c) Sjoerd Visscher 2014 BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portable TrustworthyIOT, Variant of / that does multiplication of the constants for <*> and addition for <|>.bA variant of Test.QuickCheck.Gen, with failure and a count of the number of recursive positions.8Return a generator of values of a given depth. Returns …M if there are no values of that depth or deeper. The depth is the number of  calls. Natural transformations flips the <|> operator from †.An  changes the way an  unfolds. JLift a computation from the argument unfolder to the constructed unfolder.iUnfolders provide a way to unfold data structures. The methods have default implementations in terms of †, but you can implement i to act on recursive positions of the data structure, or simply to provide a faster implementation than ‡.'Choose one of the values from the list.Given a number n, return a number between '0' and 'n - 1'.If an unfolder is monadic,  can be implemented in terms of .(If a datatype is enumerable, we can use y to generate a value. This is the function to use if you want to unfold a datatype that has no type arguments (has kind *).EIf a datatype is also bounded, we choose between all possible values. 'boundedEnum = between minBound maxBound uses ± to generate a value. It chooses between the lower bound and one of the higher values. This means that f.e. breadth-first unfolding and arbitrary will prefer lower values. )boundedEnumD = betweenD minBound maxBound5Run an unfolding function with one argument using an %, given a way to run the transformer. 6Run an unfolding function with two arguments using an %, given a way to run the transformer.!8Run an unfolding function with three arguments using an %, given a way to run the transformer."!Apply a certain function of type  f a -> f a to the result of a . The depth is passed as ˆE, so you can apply a different function at each depth. Because of a forall(, the function needs to be wrapped in a   constructor. See #) for an example how to use this function.# Limit the depth of an unfolding.$VChange the order of unfolding to be breadth-first, by maximum depth of the components.%ZChange the order of unfolding to be breadth-first, by the sum of depths of the components.'@Unfolds to a constant numeric value. Useful for counting shapes.+rLimit the depth of the generated data structure by dividing the given size by the number of recursive positions.0,Choose between values of a given depth only.5NApplies a certain function depending on the depth at every recursive position.7"Reverse the list passed to choose.9Choose randomly.<Derived instance.=Derived instance.>Derived instance.?Derived instance.@Derived instance.ADerived instance.BDerived instance.CDerived instance.DDerived instance.EDerived instance.FDerived instance.GDerived instance.HAlways choose the first item.I"Don't choose but return all items.JDerived instance.KDerived instance.R  !"#‰Š‹$%ŒŽ&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK'  !"#$%&'& !  "#$%B    !"#‰Š‹$%ŒŽ&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK(c) Sjoerd Visscher 2014 BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableSafe6:QRX%Data structures that can be unfolded.For example, given a data type 7data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)a suitable instance would be Šinstance Unfoldable Tree where unfold fa = choose [ pure Empty , Leaf <$> fa , Node <$> unfold fa <*> fa <*> unfold fa ])i.e. it follows closely the instance for 1, but instead of matching on an input value, we  from a list of all cases. Instead of manually writing the X instance, you can add a deriving " to your datatype and declare an X* instance without giving a definition for Y.;For example the previous example can be simplified to just: ˜{-# LANGUAGE DeriveGeneric #-} import GHC.Generics data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a) deriving Generic1 instance Unfoldable TreeY`Given a way to generate elements, return a way to generate structures containing those elements.Z#Unfold the structure, always using () as elements.[?Breadth-first unfold, which orders the result by the number of  calls.\1Unfold the structure breadth-first, always using () as elements.]unfoldrC builds a data structure from a seed value. It can be specified as: /unfoldr f z == fromList (Data.List.unfoldr f z)^œCreate a data structure using the list as input. This can fail because there might not be a data structure with the same number of element positions as the number of elements in the list._$Always choose the first constructor.`#Always choose the last constructor.a$Generate all the values depth-first.b8Generate all the values upto a given depth, depth-first.c&Generate all the values breadth-first.d=Generate a random value, can be used as default instance for ‘.eEProvides a QuickCheck generator, can be used as default instance for ’.#“”XYZ[\]^_`abcdefghijklmnopqrstuvwxXYZ[\]^_`abcdeXYYZ[\]^_`abcde!“”XYYZ[\]^_`abcdefghijklmnopqrstuvwx(c) Sjoerd Visscher 2014 BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableSafe y,Data structures with 2 type arguments (kind  * -> * -> *) that can be unfolded.For example, given a data type =data Tree a b = Empty | Leaf a | Node (Tree a b) b (Tree a b)a suitable instance would be ›instance Biunfoldable Tree where biunfold fa fb = choose [ pure Empty , Leaf <$> fa , Node <$> biunfold fa fb <*> fb <*> biunfold fa fb ])i.e. it follows closely the instance for  Bitraversable1, but instead of matching on an input value, we  from a list of all cases.z`Given a way to generate elements, return a way to generate structures containing those elements.{#Unfold the structure, always using () as elements.|?Breadth-first unfold, which orders the result by the number of  calls.}1Unfold the structure breadth-first, always using () as elements.~ biunfoldr+ builds a data structure from a seed value.żCreate a data structure using the lists as input. This can fail because there might not be a data structure with the same number of element positions as the number of elements in the lists.€=Generate a random value, can be used as default instance for ‘.EProvides a QuickCheck generator, can be used as default instance for ’. yz{|}~€‚ƒ„ yz{|}~€ yz{|}~€ yz{|}~€‚ƒ„•        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cd€‚ƒ„‚ƒ…‚†‡ˆ‰Š‹ŒŽ‚‘’‚“”•–—˜™š›œ'unfoldable-0.8.4-1vjWjBG1fugJVqA410gXIH Data.UnfolderData.UnfoldableData.Biunfoldable Data.FunctorConstantNumConst getNumConstArbSplitBFSgetBFSWithRec getWithRecNTgetNTDualAgetDualAUnfolderTransformerliftRandom getRandomUnfolderchoose chooseIntchooseMonadDefaultbetween boundedEnumbetweenD boundedEnumDalaala2ala3withRec limitDepthbfsbfsBySumarbUnit$fUnfolderNumConst$fAlternativeNumConst$fApplicativeNumConst$fFunctorNumConst $fUnfolderArb$fAlternativeArb$fApplicativeArb $fFunctorArb$fUnfolderTransformerBFS $fUnfolderBFS$fAlternativeBFS$fApplicativeBFS $fFunctorBFS$fUnfolderTransformerWithRec$fUnfolderWithRec$fUnfolderTransformerDualA$fUnfolderDualA$fAlternativeDualA$fUnfolderRandom$fMonadPlusRandom$fAlternativeRandom$fUnfolderWriterT$fUnfolderReaderT$fUnfolderStateT$fUnfolderRWST$fUnfolderMaybeT$fUnfolderListT$fUnfolderErrorT$fUnfolderLift$fUnfolderBackwards$fUnfolderReverse$fUnfolderCompose$fUnfolderProduct$fUnfolderMaybe $fUnfolder[]$fUnfolderWrappedArrow$fUnfolderWrappedMonad$fFunctorRandom$fApplicativeRandom $fMonadRandom $fEqDualA $fShowDualA$fFunctorDualA$fApplicativeDualA$fFunctorWithRec$fApplicativeWithRec$fAlternativeWithRec $fEqNumConst$fShowNumConst Unfoldableunfoldunfold_unfoldBF unfoldBF_unfoldrfromListleftMost rightMost allDepthFirst allToDepthallBreadthFirst randomDefaultarbitraryDefault$fUnfoldableReverse$fUnfoldableCompose$fUnfoldableSum$fUnfoldableProduct$fUnfoldableConstant$fUnfoldableIdentity$fUnfoldable(,)$fUnfoldableEither$fUnfoldableMaybe$fUnfoldable[] $fGUnfold:.: $fGUnfold:*: $fGUnfold:+: $fGUnfoldM1 $fGUnfoldK1 $fGUnfoldRec1 $fGUnfoldPar1 $fGUnfoldU1 $fGUnfoldV1 Biunfoldablebiunfold biunfold_ biunfoldBF biunfoldBF_ biunfoldr fromLists$fBiunfoldableConstant$fBiunfoldable(,)$fBiunfoldableEitherbaseGHC.BaseNothing Alternative Data.Foldableasumghc-prim GHC.TypesIntbySumbyMaxbfsBypackBFS flattenBFS flattenArbData.Traversable Traversable GHC.GenericsGeneric1!random-1.1-54KmMHXjttlERYcr1mvsAe System.Random'QuickCheck-2.9.1-ADKJfTsJVEWJp7VC229wViTest.QuickCheck.Arbitrary ArbitraryGUnfoldgunfold