ist es union und intersect Haskell-Prelude Umsetzung?

Gibt es in der Standard-Prelude-Funktionen, die die Verwirklichung der union und den Schnittpunkt der Sätze ?

union      :: (Eq a) => [a] -> [a] -> [a]
intersect  :: (Eq a) => [a] -> [a] -> [a]

Wenn Nein, kann jemand gesagt, wenn meine Umsetzung ist effizient, (machen Sie gute Verwendung von Faulheit und prelude-Funktion)

unionSet :: (Eq a) => [a] -> [a] -> [a]
unionSet as bs = foldl (\xs y -> if elem y xs then xs else xs ++ [y]) as bs

intersectSet :: (Eq a) => [a] -> [a] -> [a]
intersectSet as bs = let ns = [ a | a <- as, elem a bs] in [ b | b <- bs, elem b ns]
Schreibe einen Kommentar