Я смотрел на Data.Set
и обнаружил, что у него нет функции powerset
. Почему?
Я могу реализовать это так:
import Data.Set (Set, empty, fromList, toList, insert)
powerset :: (Ord a) => Set a -> Set (Set a)
powerset s = fromList $ map (fromList) (powerList $ toList s)
powerList :: [a] -> [[a]]
powerList [] = [[]]
powerList (x:xs) = powerList xs ++ map (x:) (powerList xs)
Но это не самый эффективный способ сделать это. ОК, я тоже могу написать
powerList :: [a] -> [[a]]
powerList = filterM (const [True, False])
но все же мне интересно, почему Data.Set
не имеет функции powerset
.
Кроме того, как лучше написать powerset :: (Ord a) => Set a -> Set (Set a)
?