treefold-0.2.0.0: Provides folds which try to combine elements in a balanced way.

Safe HaskellSafe
LanguageHaskell2010

Data.TreeFold.Strict

Description

This module provides strict versions of the functions from Data.TreeFold.

Synopsis

Documentation

>>> :{
data Tree a = Empty
            | Leaf a
            | Tree a :*: Tree a
            deriving Show
:}

treeFold :: (a -> a -> a) -> a -> [a] -> a Source #

A strict version of treeFold.

>>> (treeFold (:*:) Empty . map Leaf) [1,2,3,4]
(Leaf 1 :*: Leaf 2) :*: (Leaf 3 :*: Leaf 4)
>>> (treeFold (:*:) Empty . map Leaf) [1,2,3,4,5]
((Leaf 1 :*: Leaf 2) :*: (Leaf 3 :*: Leaf 4)) :*: Leaf 5
>>> treeFold (+) 0 (replicate 10 9.9)
99.0

treeFoldMap :: (b -> a) -> (a -> a -> a) -> a -> [b] -> a Source #

A strict version of treeFoldMap.

>>> treeFoldMap Leaf (:*:) Empty [1,2,3,4]
(Leaf 1 :*: Leaf 2) :*: (Leaf 3 :*: Leaf 4)

treeFoldNonEmpty :: (a -> a -> a) -> NonEmpty a -> a Source #

A strict version of treeFoldNonEmpty.

treeFoldMapNonEmpty :: (b -> a) -> (a -> a -> a) -> NonEmpty b -> a Source #

A strict version of treeFoldMapNonEmpty.