unfoldable-0.7.1: examples/tree.hs
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
import Control.Applicative
import Data.Unfoldable
import Data.Unfolder
import Data.Maybe
import System.Random
data Tree a = Empty | Node (Tree a) a (Tree a) deriving (Show, Generic1)
instance Unfoldable Tree
-- where
-- unfold fa = choose
-- [ pure Empty
-- , Node <$> unfold fa <*> fa <*> unfold fa
-- ]
tree7 :: Tree Int
tree7 = fromJust $ fromList [0..6]
treeShapes :: [Tree ()]
treeShapes = take 20 unfoldBF_
treeShapes' :: [Tree ()]
treeShapes' = take 20 $ bfsBySum unfold_
randomTree :: IO (Tree Bool)
randomTree = getStdRandom randomDefault