Ho bisogno di creare una funzione powerset in haskell che accetta un set e emette il power set senza voci duplicate, indipendentemente da ciò che viene inserito nella lista di input. Ad esempio [1,1] deve restituire [[], [1]]Powerset Without Duplicates
powerset [] = [[]]
powerset (x:xs) = union((powerset xs)) (map (x:) (powerset xs))
Dove unione è una funzione precedentemente definita confina con due set senza duplicati. Il problema con il codice precedente è che conta i duplicati come voci originali così input [1,1] restituisce [[], [1], [1], [1,1]].
Qualche idea? Ho pensato di usare l'unione con la lista di input e la lista vuota per eliminare i duplicati, prima di attivare il powerset, ma non sono sicuro di come sarebbe.
Non esattamente efficiente: 'filterM (const [True, False]) $ nub xs' – Sibi