patrol-0.1.0.1: source/library/Patrol/Extra/List.hs
module Patrol.Extra.List where
import qualified Data.Function as Function
insertAll :: Eq k => [(k, v)] -> [(k, v)] -> [(k, v)]
insertAll = flip $ foldr insert
insert :: Eq k => (k, v) -> [(k, v)] -> [(k, v)]
insert = insertBy $ Function.on (==) fst
insertBy :: (a -> a -> Bool) -> a -> [a] -> [a]
insertBy p x xs = case xs of
[] -> [x]
h : t
| p x h -> h : t
| otherwise -> h : insertBy p x t