utility-ht-0.0.17.1: Various small helper functions for Lists, Maybes, Tuples, Functions
Safe HaskellSafe-Inferred
LanguageHaskell98

Data.List.Reverse.StrictSpine

Description

The functions in this module process the list from the end. They do not access elements at the beginning if not necessary. You can apply the function only to finite lists. Use these functions if the list is short and the test is expensive.

Synopsis

Documentation

>>> import Test.Utility (forAllPredicates, defined)
>>> import qualified Data.List.Reverse.StrictSpine as Rev
>>> import qualified Data.List.Match as Match
>>> import qualified Data.List as List
>>> import Data.Tuple.HT (mapFst, mapPair, swap)
>>> 
>>> _suppressUnusedImportWarning :: (a -> Bool) -> [a] -> [a]
>>> _suppressUnusedImportWarning = Data.List.Reverse.StrictSpine.dropWhile

dropWhile :: (a -> Bool) -> [a] -> [a] Source #

forAllPredicates $ \p xs -> Rev.dropWhile p xs == reverse (List.dropWhile p (reverse xs))
\x xs pad -> defined $ length $ Rev.dropWhile ((x::Char)/=) $ Match.replicate (pad::[()]) undefined ++ x:xs

takeWhile :: (a -> Bool) -> [a] -> [a] Source #

forAllPredicates $ \p xs -> Rev.takeWhile p xs == reverse (List.takeWhile p (reverse xs))
\x xs pad -> defined $ Rev.takeWhile ((x::Char)/=) $ Match.replicate (pad::[()]) undefined ++ x:xs

span :: (a -> Bool) -> [a] -> ([a], [a]) Source #

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