úÎÊ      Safe-Infered JSplittable datatypes are datatypes that can be used as seeds for unfolds.  split n s splits the seed s in n seeds.  choose fs s uses part of the seed s$ to choose a function from the list fs, , and passes the remainder to that function. Convert the seed value to an int. 4If a datatype is bounded and enumerable, we can use ! to produce a value from a seed. /Reverse the split output and the choose input. +Choose between 2 ways to split and choose. The (a, b) instance uses only a for  and b for . The > instance uses modulo to choose, and splits breadth-first by - distributing bits in a round-robin fashion. Choose randomly Always choose the last item. Always choose the first item.     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  unfoldMap f = choose  [ spread $ pure Empty  , spread $ Leaf <$> to f H , spread $ Node <$> to (unfoldMap f) <*> to f <*> to (unfoldMap f)  ] )i.e. it follows closely the instance for  Traversable, with the addition of ,  and . #The instance can be simplified to:  instance Unfoldable Tree where  unfoldMap f = choose  [ const Empty  , Leaf . f H , spread $ Node <$> to (unfoldMap f) <*> to f <*> to (unfoldMap f)  ] 6Given a function to generate an element from a seed, , and an initial seed, generate a structure.  The same as  unfoldMap id. %Always choose the first constructor. $Always choose the last constructor. Count the number of times 1 is used, and split the seed in that many parts.  Signal to + that this is a subpart that needs a seed.        !      !"#$%&unfoldable-0.2.0Data.SplittableData.UnfoldableRightRLeftL SplittablesplitchoosegetInt boundedEnum Unfoldable unfoldMapunfoldleftMost rightMostspreadto$fSplittableDual$fSplittableEither$fSplittable(,)$fSplittableInteger integer-gmpGHC.Integer.TypeInteger$fSplittableStdGen$fSplittableRight$fSplittableLeft$fUnfoldableReverse$fUnfoldableCompose$fUnfoldableProduct$fUnfoldableConstant$fUnfoldableIdentity$fUnfoldable(,)$fUnfoldableEither$fUnfoldableMaybe$fUnfoldable[]