从列表中删除重复项

dem*_*mas 1 haskell list combinators

我有数据类型:

data SidesType = Sides Int Int Int deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我需要一个函数来获取SidesType列表并从中删除重复项.

*Main> let a = [Sides 3 4 5,Sides 3 4 5,Sides 5 12 13,Sides 6 8 10,Sides 6 8 10,Sides 8 15 17,Sides 9 12 15,Sides 5 12 13,Sides 9 12 15,Sides 12 16 20,Sides 8 15 17,Sides 15 20 25,Sides 12 16 20,Sides 15 20 25]
*Main> removeDuplicateFromList [] a
[Sides 3 4 5,Sides 5 12 13,Sides 6 8 10,Sides 6 8 10,Sides 8 15 17,Sides 9 12 15,Sides 5 12 13,Sides 9 12 15,Sides 12 16 20,Sides 8 15 17,Sides 15 20 25,Sides 12 16 20,Sides 15 20 25]
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案:

removeElementFromList :: [SidesType] -> SidesType -> [SidesType]
removeElementFromList lst element  = 
                      let (Sides a b c) = element
                      in [(Sides x y z) | (Sides x y z) <- lst, (x /= a) || (y /= b)]

removeDuplicateFromList :: [SidesType] -> [SidesType] -> [SidesType]
removeDuplicateFromList inlist outlist 
                        | (length outlist) == 0 = inlist
                        | otherwise = 
                          let element = head outlist
                              b = tail outlist
                              filtered = removeElementFromList b element
                      in removeDuplicateFromList (inlist ++ [element]) filtered
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有其他方法以更多的haskell方式编写此代码?

Ed'*_*'ka 7

像往常一样,"By"功能增加了灵活性:

nubBy :: (a -> a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

PS虽然它是O(n ^ 2)