unfoldable-0.4.0: examples/tree.hs
import Control.Applicative
import Data.Unfoldable
import Data.Unfolder
import Data.Maybe
import System.Random
data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a) deriving Show
instance Unfoldable Tree where
unfold fa = choose
[ pure Empty
, Leaf <$> fa
, Node <$> unfold fa <*> fa <*> unfold fa
]
tree7 :: Tree Int
tree7 = fromJust $ fromList [0..6]
treeShapes :: [Tree ()]
treeShapes = take 10 unfoldBF_
randomTree :: IO (Tree Bool)
randomTree = getStdRandom randomValue