base-compat-0.14.1: A compatibility layer for base
Safe HaskellTrustworthy
LanguageHaskell2010

Data.List.Compat

Synopsis

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