packages feed

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