concat
First, if we have a container of lists, of type t [a], then we can take the
lists in this container and concatenate them to produce a single list:
GHCi
>>> concat [[1], [2,3], [4,5]]
[1,2,3,4,5]
or for a tree of lists:
GHCi
>>> tree = Node Empty 5 (Node (Node Empty 3 Empty) 1 (Node Empty 2 Empty))
>>> concat $ fmap singleton tree
[5,3,1,2]
The implementation of concat is simply the specialization of fold to the
list monoid. fold works for arbitrary monoids:1
concat :: Foldable t => t [a] -> [a]
concat = fold
-
Interestingly, even though it doesn't get any simpler than this, this is not the implementation provided in
Data.Foldable, even though it has the same effect. ↩