>>> span undefined [] ([],[]) >>> fst (span (const False) undefined) *** Exception: Prelude.undefined >>> fst (span (const False) (undefined : undefined)) [] >>> take 1 (fst (span (const True) (1 : undefined))) [1]span produces the first component of the tuple lazily:
>>> take 10 (fst (span (const True) [1..])) [1,2,3,4,5,6,7,8,9,10]
>>> span (< 3) [1,2,3,4,1,2,3,4] ([1,2],[3,4,1,2,3,4])
>>> span (< 9) [1,2,3] ([1,2,3],[])
>>> span (< 0) [1,2,3] ([],[1,2,3])
>>> 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]
>>> 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],[])
partition p xs == (filter p xs, filter (not . p) xs)
>>> partition (`elem` "aeiou") "Hello World!" ("eoo","Hll Wrld!")
>>> partition even [1..10] ([2,4,6,8,10],[1,3,5,7,9])
>>> partition (< 5) [1..10] ([1,2,3,4],[5,6,7,8,9,10])
>>> span (< 3) [1,2,3,4,1,2,3,4] ([1,2],[3,4,1,2,3,4]) >>> span (< 9) [1,2,3] ([1,2,3],[]) >>> span (< 0) [1,2,3] ([],[1,2,3])span p xs is equivalent to (takeWhile p xs, dropWhile p xs)
>>> 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],[])break p is equivalent to span (not . p).
breakEnd isLower "youRE" == ("you","RE") breakEnd isLower "youre" == ("youre","") breakEnd isLower "YOURE" == ("","YOURE") \f xs -> breakEnd (not . f) xs == spanEnd f xs
spanEnd isUpper "youRE" == ("you","RE") spanEnd (not . isSpace) "x y z" == ("x y ","z") \f xs -> uncurry (++) (spanEnd f xs) == xs \f xs -> spanEnd f xs == swap (both reverse (span f (reverse xs)))
forAllPredicates $ \p xs -> uncurry (++) (breakAfter p xs) == xs
forAllPredicates $ \p xs -> Rev.span p xs == swap (mapPair (reverse, reverse) (List.span p (reverse xs)))
forAllPredicates $ \p xs -> Rev.span p xs == (Rev.dropWhile p xs, Rev.takeWhile p xs)
\x xs pad -> defined $ Match.take (pad::[()]) $ fst $ Rev.span ((x::Char)/=) $ cycle $ x:xs
forAllPredicates $ \p xs -> Rev.span p xs == swap (mapPair (reverse, reverse) (List.span p (reverse xs)))
forAllPredicates $ \p xs -> Rev.span p xs == (Rev.dropWhile p xs, Rev.takeWhile p xs)
\x xs pad -> defined $ mapFst length $ Rev.span ((x::Char)/=) $ Match.replicate (pad::[()]) undefined ++ x:xs
partition p xs == (filter p xs, filter (not . p) xs)
>>> partition (`elem` "aeiou") "Hello World!" ("eoo","Hll Wrld!")
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],[])break p is equivalent to span (not . p).
span (< 3) [1,2,3,4,1,2,3,4] == ([1,2],[3,4,1,2,3,4]) span (< 9) [1,2,3] == ([1,2,3],[]) span (< 0) [1,2,3] == ([],[1,2,3])span p xs is equivalent to (takeWhile p xs, dropWhile p xs)
>>> breakAfter even [1,3,5,2,4,7,8] ([1,3,5,2],[4,7,8])