module Patrol.Extra.List where import qualified Data.Function as Function insertAll :: (Eq k) => [(k, v)] -> [(k, v)] -> [(k, v)] insertAll :: forall k v. Eq k => [(k, v)] -> [(k, v)] -> [(k, v)] insertAll = forall a b c. (a -> b -> c) -> b -> a -> c flip forall a b. (a -> b) -> a -> b $ forall (t :: * -> *) a b. Foldable t => (a -> b -> b) -> b -> t a -> b foldr forall k v. Eq k => (k, v) -> [(k, v)] -> [(k, v)] insert insert :: (Eq k) => (k, v) -> [(k, v)] -> [(k, v)] insert :: forall k v. Eq k => (k, v) -> [(k, v)] -> [(k, v)] insert = forall a. (a -> a -> Bool) -> a -> [a] -> [a] insertBy forall a b. (a -> b) -> a -> b $ forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c Function.on forall a. Eq a => a -> a -> Bool (==) forall a b. (a, b) -> a fst insertBy :: (a -> a -> Bool) -> a -> [a] -> [a] insertBy :: forall a. (a -> a -> Bool) -> a -> [a] -> [a] insertBy a -> a -> Bool p a x [a] xs = case [a] xs of [] -> [a x] a h : [a] t | a -> a -> Bool p a x a h -> a h forall a. a -> [a] -> [a] : [a] t | Bool otherwise -> a h forall a. a -> [a] -> [a] : forall a. (a -> a -> Bool) -> a -> [a] -> [a] insertBy a -> a -> Bool p a x [a] t