break, applied to a predicate
p and a list
xs, returns a tuple where first element is longest prefix
(possibly empty) of
xs of elements that
do not satisfy
p and second element is the remainder of the list:
break p is equivalent to
span (not .
p) and consequently to
(takeWhile (not . p) xs,
dropWhile (not . p) xs), even if
p is
_|_.
Laziness
>>> break undefined []
([],[])
>>> fst (break (const True) undefined)
*** Exception: Prelude.undefined
>>> fst (break (const True) (undefined : undefined))
[]
>>> take 1 (fst (break (const False) (1 : undefined)))
[1]
break produces the first component of the tuple lazily:
>>> take 10 (fst (break (const False) [1..]))
[1,2,3,4,5,6,7,8,9,10]
Examples
>>> break (> 3) [1,2,3,4,1,2,3,4]
([1,2,3],[4,1,2,3,4])
>>> break (< 9) [1,2,3]
([],[1,2,3])
>>> break (> 9) [1,2,3]
([1,2,3],[])