packages feed

unfoldable-1.0: examples/tree.hs

{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveGeneric, DeriveAnyClass #-}

import GHC.Generics
import Data.Unfoldable
import Data.Unfolder

import Data.Maybe
import Test.QuickCheck.Gen (sample, resize, Gen)


data Tree a = Empty | Node (Tree a) a (Tree a) deriving (Show, Generic1, Foldable, Unfoldable)

tree7 :: Tree Int
tree7 = fromJust $ fromList [0..6]

treeShapes :: [Tree ()]
treeShapes = take 20 unfoldBF_

treeShapes' :: [Tree ()]
treeShapes' = take 20 $ bfsBySum unfold_

arbitraryTrees :: Int -> IO ()
arbitraryTrees size = sample (resize size arbitraryDefault :: Gen (Tree ()))

data Pair a = Pair a a
  deriving (Show, Functor, Foldable, Generic1, Unfoldable)
data PerfectTree a = Leaf a | Branch (PerfectTree (Pair a))
  deriving (Show, Functor, Foldable, Generic1, Unfoldable)

ptreeShapes :: [PerfectTree ()]
ptreeShapes = take 5 unfoldBF_