on master help sign in
Added delete, union, diff to Prelude.List
8ba08bbJohn Dobronszki
libs/prelude/Prelude/List.idr+17
@@ -12,6 +12,7 @@ import Prelude.Nat
12%access public
12%access public
13%default total
13%default total
14
14
15+infix 5 \\
15infixr 7 ::,++
16infixr 7 ::,++
16
17
17%elim data List a
18%elim data List a
@@ -399,6 +400,22 @@ nubBy = nubBy' []
399nub : Eq a => List a -> List a
400nub : Eq a => List a -> List a
400nub = nubBy (==)
401nub = nubBy (==)
401
402
403+deleteBy : (a -> a -> Bool) -> a -> List a -> List a
404+deleteBy _ _ [] = []
405+deleteBy eq x (y::ys) = if x `eq` y then ys else y :: deleteBy eq x ys
406+
407+delete : (Eq a) => a -> List a -> List a
408+delete = deleteBy (==)
409+
410+(\\) : (Eq a) => List a -> List a -> List a
411+(\\) = foldl (flip delete)
412+
413+unionBy : (a -> a -> Bool) -> List a -> List a -> List a
414+unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs
415+
416+union : (Eq a) => List a -> List a -> List a
417+union = unionBy (==)
418+
402--------------------------------------------------------------------------------
419--------------------------------------------------------------------------------
403-- Splitting and breaking lists
420-- Splitting and breaking lists
404--------------------------------------------------------------------------------
421--------------------------------------------------------------------------------