base-compat-0.14.1: A compatibility layer for base

Safe Haskell | Trustworthy
Language | Haskell2010

Data.List.Compat

Synopsis

- module Data.List
- compareLength :: [a] -> Int -> Ordering
- inits1 :: [a] -> [NonEmpty a]
- tails1 :: [a] -> [NonEmpty a]

# Documentation

module Data.List

compareLength :: [a] -> Int -> Ordering Source #

Use `compareLength` `xs` `n` as a safer and faster alternative to `compare` (`length` `xs`) `n`. Similarly, it's better to write `compareLength xs 10 == LT` instead of `length xs < 10`.

While `length` would force and traverse the entire spine of `xs` (which could even diverge if `xs` is infinite), `compareLength` traverses at most `n` elements to determine its result.

    >>> compareLength [] 0
    EQ
    >>> compareLength [] 1
    LT
    >>> compareLength ['a'] 1
    EQ
    >>> compareLength ['a', 'b'] 1
    GT
    >>> compareLength [0..] 100
    GT
    >>> compareLength undefined (-1)
    GT
    >>> compareLength ('a' : undefined) 0
    GT

Since: 4.21.0.0

inits1 :: [a] -> [NonEmpty a] Source #

The `inits1` function returns all non-empty initial segments of the argument, shortest first.

#### Laziness

Expand

Note that `inits1` has the following strictness property: `inits1 (xs ++ _|_) = inits1 xs ++ _|_`

In particular, `inits1 _|_ = _|_`

#### Examples

Expand

    >>> inits1 "abc"
    ['a' :| "",'a' :| "b",'a' :| "bc"]

    >>> inits1 []
    []

inits1 is productive on infinite lists:

    >>> take 3 $ inits1 [1..]
    [1 :| [],1 :| [2],1 :| [2,3]]

Since: 4.21.0.0

tails1 :: [a] -> [NonEmpty a] Source #

\(\mathcal{O}(n)\). The `tails1` function returns all non-empty final segments of the argument, longest first.

#### Laziness

Expand

Note that `tails1` has the following strictness property: `tails1 _|_ = _|_`

    >>> tails1 undefined
    *** Exception: Prelude.undefined

    >>> drop 1 (tails1 [undefined, 1, 2])
    [1 :| [2],2 :| []]

#### Examples

Expand

    >>> tails1 "abc"
    ['a' :| "bc",'b' :| "c",'c' :| ""]

    >>> tails1 [1, 2, 3]
    [1 :| [2,3],2 :| [3],3 :| []]

    >>> tails1 []
    []

Since: 4.21.0.0