Protolude.List

protolude-0.3.4: A small prelude.

Safe Haskell | Safe
Language | Haskell2010

Protolude.List

Synopsis

- head :: Foldable f => f a -> Maybe a
- ordNub :: Ord a => [a] -> [a]
- sortOn :: Ord o => (a -> o) -> [a] -> [a]
- list :: [b] -> (a -> b) -> [a] -> [b]
- product :: (Foldable f, Num a) => f a -> a
- sum :: (Foldable f, Num a) => f a -> a
- groupBy :: (a -> a -> Bool) -> [a] -> [[a]]

# Documentation

head :: Foldable f => f a -> Maybe a #

ordNub :: Ord a => [a] -> [a] #

sortOn :: Ord o => (a -> o) -> [a] -> [a] #

list :: [b] -> (a -> b) -> [a] -> [b] #

product :: (Foldable f, Num a) => f a -> a #

sum :: (Foldable f, Num a) => f a -> a #

groupBy :: (a -> a -> Bool) -> [a] -> [[a]] #

The `groupBy` function is the non-overloaded version of `group`.

When a supplied relation is not transitive, it is important to remember that equality is checked against the first element in the group, not against the nearest neighbour:

    >>> groupBy (\a b -> b - a < 5) [0..19]
    [[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]]

It's often preferable to use `Data.List.NonEmpty.` `groupBy`, which provides type-level guarantees of non-emptiness of inner lists.

#### Examples

Expand

    >>> groupBy (/=) [1, 1, 1, 2, 3, 1, 4, 4, 5]
    [[1],[1],[1,2,3],[1,4,4,5]]

    >>> groupBy (>) [1, 3, 5, 1, 4, 2, 6, 5, 4]
    [[1],[3],[5,1,4,2],[6,5,4]]

    >>> groupBy (const not) [True, False, True, False, False, False, True]
    [[True,False],[True,False,False,False],[True]]