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:: a typeCtrl KGHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05
Moduleutility-ht-0.0.17.2Haskell98
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.
import Test.Utility (forAllPredicates, defined)import qualified Data.List.Reverse.StrictSpine as Revimport qualified Data.List.Match as Matchimport qualified Data.List as Listimport Data.Tuple.HT (mapFst, mapPair, swap)_suppressUnusedImportWarning :: (a -> Bool) -> [a] -> [a]_suppressUnusedImportWarning = Data.List.Reverse.StrictSpine.dropWhile
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:xsforAllPredicates $ \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:xsforAllPredicates $ \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