unfoldable-0.5.0: examples/btree.hs
import Control.Applicative
import Data.Unfoldable
import Data.Unfolder
import Data.Maybe
import System.Random
data TB a = LB a | BB (TB (a, a)) deriving Show
instance Unfoldable TB where
unfold fa = choose
[ LB <$> fa
, BB <$> unfold ((,) <$> fa <*> fa)
]
btree8 :: TB Int
btree8 = fromJust $ fromList [0..7]
btreeShapes :: [TB ()]
btreeShapes = take 5 unfold_
randomBTree :: IO (TB Bool)
randomBTree = getStdRandom randomDefault