yq5      !"#$%&'()*+,-./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 <|>.aA 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 y to act on recursive positions of the data structure, or simply to provide a faster implementation than 'asum . map f'.'Choose one of the values from the list.DChoose one of the values from the list and apply the given function.Given a number n, return a number between '0' and 'n - 1'.If an unfolder is monadic,  can be implemented in terms of .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 maxBound!5Run 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..qLimit the depth of the generated data structure by dividing the given size by the number of recursive positions.3,Choose between values of a given depth only.8NApplies a certain function depending on the depth at every recursive position.:"Reverse the list passed to choose.<Choose randomly.?Derived instance.@Derived instance.ADerived instance.BDerived instance.CDerived instance.DDerived instance.EDerived instance.FDerived instance.GDerived instance.HDerived instance.IDerived instance.JDerived instance.KDerived instance.LAlways choose the first item.M"Don't choose but return all items.NDerived instance.ODerived instance.V  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO)  !"#$%&'() (!"#  $%&'E    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO(c) Sjoerd Visscher 2014 BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableSafe6:QR\%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 \ instance, you can add a deriving " to your datatype and declare an \* instance without giving a definition for ].;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 Tree]`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.aunfoldrC builds a data structure from a seed value. It can be specified as: /unfoldr f z == fromList (Data.List.unfoldr f z)bCreate 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.c$Always choose the first constructor.d#Always choose the last constructor.e$Generate all the values depth-first.f8Generate all the values upto a given depth, depth-first.g&Generate all the values breadth-first.h=Generate a random value, can be used as default instance for .iEProvides a QuickCheck generator, can be used as default instance for .$\]^_`abcdefghijklmnopqrstuvwxyz{|}\]^_`abcdefghi\]]^_`abcdefghi"\]]^_`abcdefghijklmnopqrstuvwxyz{|}(c) Sjoerd Visscher 2014 BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableSafe ~,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.`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 . ~ ~ ~ ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~gh%unfoldable-0.9-11Dzr8E2u24JXWgjJQIBDm Data.UnfolderData.UnfoldableData.Biunfoldable Data.FunctorConstantNumConst getNumConstArbSplitBFSgetBFSWithRec getWithRecNTgetNTDualAgetDualAUnfolderTransformerliftRandom getRandomUnfolderchoose chooseMap chooseIntchooseMonadDefaultchooseMapMonadDefaultbetween boundedEnumbetweenD boundedEnumDalaala2ala3withRec limitDepthbfsbfsBySumarbUnit $fUnfolderSeq$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$fUnfolderExceptT$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$fUnfoldableSeq$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 Alternativeghc-prim GHC.TypesIntbySumbyMaxbfsBypackBFS flattenBFS flatMapArbData.Traversable Traversable GHC.GenericsGeneric1!random-1.1-54KmMHXjttlERYcr1mvsAe System.Random'QuickCheck-2.9.2-AzbjWrJo3WFD60ZxKurQ3sTest.QuickCheck.Arbitrary ArbitraryGUnfoldgunfold