Я смотрел Data.Set
и обнаружил, что он не имеет набора параметров Функция
Почему?
Я могу реализовать это так:
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)
?