module Erebos.Util where uniq :: Eq a => [a] -> [a] uniq :: forall a. Eq a => [a] -> [a] uniq (a x:a y:[a] xs) | a x a -> a -> Bool forall a. Eq a => a -> a -> Bool == a y = [a] -> [a] forall a. Eq a => [a] -> [a] uniq (a xa -> [a] -> [a] forall a. a -> [a] -> [a] :[a] xs) | Bool otherwise = a x a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] -> [a] forall a. Eq a => [a] -> [a] uniq (a ya -> [a] -> [a] forall a. a -> [a] -> [a] :[a] xs) uniq [a] xs = [a] xs mergeBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy :: forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp (a x : [a] xs) (a y : [a] ys) = case a -> a -> Ordering cmp a x a y of Ordering LT -> a x a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp [a] xs (a y a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] ys) Ordering EQ -> a x a -> [a] -> [a] forall a. a -> [a] -> [a] : a y a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp [a] xs [a] ys Ordering GT -> a y a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp (a x a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] xs) [a] ys mergeBy a -> a -> Ordering _ [a] xs [] = [a] xs mergeBy a -> a -> Ordering _ [] [a] ys = [a] ys mergeUniqBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeUniqBy :: forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeUniqBy a -> a -> Ordering cmp (a x : [a] xs) (a y : [a] ys) = case a -> a -> Ordering cmp a x a y of Ordering LT -> a x a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp [a] xs (a y a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] ys) Ordering EQ -> a x a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp [a] xs [a] ys Ordering GT -> a y a -> [a] -> [a] forall a. a -> [a] -> [a] : (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeBy a -> a -> Ordering cmp (a x a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] xs) [a] ys mergeUniqBy a -> a -> Ordering _ [a] xs [] = [a] xs mergeUniqBy a -> a -> Ordering _ [] [a] ys = [a] ys mergeUniq :: Ord a => [a] -> [a] -> [a] mergeUniq :: forall a. Ord a => [a] -> [a] -> [a] mergeUniq = (a -> a -> Ordering) -> [a] -> [a] -> [a] forall a. (a -> a -> Ordering) -> [a] -> [a] -> [a] mergeUniqBy a -> a -> Ordering forall a. Ord a => a -> a -> Ordering compare diffSorted :: Ord a => [a] -> [a] -> [a] diffSorted :: forall a. Ord a => [a] -> [a] -> [a] diffSorted (a x:[a] xs) (a y:[a] ys) | a x a -> a -> Bool forall a. Ord a => a -> a -> Bool < a y = a x a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] -> [a] -> [a] forall a. Ord a => [a] -> [a] -> [a] diffSorted [a] xs (a ya -> [a] -> [a] forall a. a -> [a] -> [a] :[a] ys) | a x a -> a -> Bool forall a. Ord a => a -> a -> Bool > a y = [a] -> [a] -> [a] forall a. Ord a => [a] -> [a] -> [a] diffSorted (a xa -> [a] -> [a] forall a. a -> [a] -> [a] :[a] xs) [a] ys | Bool otherwise = [a] -> [a] -> [a] forall a. Ord a => [a] -> [a] -> [a] diffSorted [a] xs (a ya -> [a] -> [a] forall a. a -> [a] -> [a] :[a] ys) diffSorted [a] xs [a] _ = [a] xs intersectsSorted :: Ord a => [a] -> [a] -> Bool intersectsSorted :: forall a. Ord a => [a] -> [a] -> Bool intersectsSorted (a x:[a] xs) (a y:[a] ys) | a x a -> a -> Bool forall a. Ord a => a -> a -> Bool < a y = [a] -> [a] -> Bool forall a. Ord a => [a] -> [a] -> Bool intersectsSorted [a] xs (a ya -> [a] -> [a] forall a. a -> [a] -> [a] :[a] ys) | a x a -> a -> Bool forall a. Ord a => a -> a -> Bool > a y = [a] -> [a] -> Bool forall a. Ord a => [a] -> [a] -> Bool intersectsSorted (a xa -> [a] -> [a] forall a. a -> [a] -> [a] :[a] xs) [a] ys | Bool otherwise = Bool True intersectsSorted [a] _ [a] _ = Bool False