úÎb¾  A 'type-class synonym' for Trees. 6Iterate a tree in DFS pre-order. (Depth First Search) ATransform a tree into lists of the items in its different layers 4Iterate a tree in BFS order. (Breadth First Search) ,Best First Search given a scoring function. (Prune a tree or list given a predicate.  Unlike  / which stops a branch where the condition doesn't hold,  prune cuts+ the whole branch (the underlying MonadPlus' s mzero). #Best-First-Search given that a node'Js children are in sorted order (best first) and given a scoring function. T Especially useful for trees where nodes have an infinite amount of children, where  will get stuck. ,Example: Find smallest Pythagorian Triplets  import Control.Monad & import Control.Monad.DList (toListT)  import Control.Monad.Generator  import Control.Monad.Trans  import Data.List.Tree  import Data.Maybe   pythagorianTriplets =  catMaybes .  fmap fst . ) bestFirstSearchSortedChildrenOn snd .  toListT . generate $ do  x <- lift [1..]  yield (Nothing, x)  y <- lift [1..]  yield (Nothing, x + y)  z <- lift [1..]  yield (Nothing, x + y + z) % lift . guard $ x^2 + y^2 == z^2  yield (Just (x, y, z), 0)  ' > print $ take 10 pythagorianTriplets a [(3,4,5),(4,3,5),(6,8,10),(8,6,10),(5,12,13),(12,5,13),(9,12,15),(12,9,15),(15,8,17),(8,15,17)]  Generalized Branch and Bound. A method for pruning. The result of this function 5 would usually be given to another search algorithm,  such as /, in order to find the node with lowest value. 6This augments the regular search by pruning the tree. F Given a function to calculate a lower and upper bound for a subtree, L we keep the lowest upper bound (hence the State monad) encountered so far, K and we prune any subtree whose lower bound is over the known upper bound.         ListTree-0.1Data.List.TreeTreedfs bfsLayersbfsbestFirstSearchOnprunepruneMbestFirstSearchSortedChildrenOnbranchAndBoundsearchmergeOnSortedHeadsbaseGHC.List takeWhile