Вы узнаете, что Haskell демонстрирует функцию powerset
:
powerset
некоторого набора - это набор всех подмножеств этого множества.
powerset :: [a] -> [[a]]
powerset xs = filterM (\x -> [True, False]) xs
И запустив его:
ghci> powerset [1,2,3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]
Что здесь происходит? Я вижу подпись filterM
(показано ниже), но я не понимаю, как она выполняется.
filterM :: Monad m => (a -> m Bool) -> [a] -> m [a]
Прошу вас пройти через эту функцию powerset
.