úÎ(U%h       non-portable experimentalsjoerd@w3future.comNone /Return a generator of values of a given depth.  Returns  1 if there are no values of that depth or deeper. QUnfolders provide a way to unfold data structures. The minimal implementation is  . (Choose one of the values from the list. Given a number n, return a number between '0' and 'n - 1'. !If an unfolder is an instance of !,   can be implemented in terms of ". If an unfolder is monadic,   can be implemented in terms of . 4If a datatype is bounded and enumerable, we can use  to generate a value. #-Choose between values of a given depth only. $Choose randomly. %Don't choose but return all items. &Always choose the last item. 'Always choose the first item. ! #()$*+,-./%&'      #()$*+,-./%&' non-portable experimentalsjoerd@w3future.com Safe-Infered &Data structures that can be unfolded. For example, given a data type  9 data 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  Traversable-, but instead of matching on an input value,  we   from a list of all cases. aGiven 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. unfoldrD builds a data structure from a seed value. It can be specified as: 1 unfoldr f z == fromList (Data.List.unfoldr f z) 1Create a data structure using the list as input. P 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. %Generate all the values depth first. 'Generate all the values breadth first. EGenerate a random value, can be used as default instance for Random. 012345678  0123456789      !"#!$%!$&'()*+,-./0123456789:;<=unfoldable-0.4.0 Data.UnfolderData.UnfoldableBFSgetBFSRandom getRandomRightRgetRLeftLgetLUnfolderchoose chooseIntchooseAltDefaultchooseMonadDefault boundedEnumrunBFSpackBFS Unfoldableunfoldunfold_unfoldBF unfoldBF_unfoldrfromListleftMost rightMost allDepthFirstallBreadthFirst randomValuebase Data.MaybeNothingControl.Applicative Alternative<|> $fUnfolderBFS$fUnfolderRandom $fUnfolder[]$fUnfolderRight$fUnfolderLeft$fApplicativeBFS $fFunctorBFS$fUnfolderReaderT$fUnfolderContT$fUnfolderStateT$fUnfolderReverse$fUnfolderCompose$fUnfolderProduct$fUnfoldableReverse$fUnfoldableCompose$fUnfoldableProduct$fUnfoldableConstant$fUnfoldableIdentity$fUnfoldable(,)$fUnfoldableEither$fUnfoldableMaybe$fUnfoldable[]