Splittable datatypes are datatypes that can be used as seeds for unfolds.
split n s splits the seed
choose fs s uses part of the seed
s to choose a function from the list
and passes the remainder to that function.
Convert the seed value to an
Always choose the last item.
Always choose the first item.
|Splittable s => Splittable (Dual s)|
Reverse the split output and the choose input.
|(Splittable a, Splittable b) => Splittable (Either a b)|
Choose between 2 ways to split and choose.
|(Splittable a, Splittable b) => Splittable (a, b)|
If a datatype is bounded and enumerable, we can use
getInt to produce a value from a seed.