module HAHP.Validation.Unique where --import Data.List.Unique import Data.List (group, sort, sortBy) -- * Unique -- TO REMOVE -- https://hackage.haskell.org/package/Unique-0.4.2/docs/src/Data-List-Unique.html#repeated sg :: Ord a => [a] -> [[a]] sg = group . sort filterByLength :: Ord a => (Int -> Bool) -> [a] -> [[a]] filterByLength p = filter (p . length) . sg -- | 'repeated' finds only the elements that are present more than once in the list. Example: -- -- > repeated "foo bar" == "o" repeated :: Ord a => [a] -> [a] repeated = repeatedBy (>1) -- | The repeatedBy function behaves just like repeated, except it uses a user-supplied equality predicate. -- -- > repeatedBy (>2) "This is the test line" == " eist" repeatedBy :: Ord a => (Int -> Bool) -> [a] -> [a] repeatedBy p = map head . filterByLength p