packages feed

unfoldable-1.0: examples/btree.hs

{-# LANGUAGE DeriveFoldable #-}
import Data.Unfoldable
import Data.Unfolder

import Data.Maybe
import System.Random


data TB a = LB a | BB (TB (a, a)) deriving (Show, Foldable)

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