как удалить все элементы из карты Хаскелла, которые соответствуют условию по их значению, а не ключу? - PullRequest
0 голосов
/ 10 февраля 2012

Я хочу удалить все элементы из Data.Map, которые соответствуют определенному условию.Пусть говорит foobar это функция, вот его необходимое поведение:

foobar :: (a -> Bool) -> Map k a -> Map k a
foobar (>= 20) $ fromList [("john",3),("sasha",8),("mary",33),("philip",20)] 
-- the expected result is  fromList [("john",3),("sasha",8)]

спасибо за любой ответ!

Ответы [ 2 ]

9 голосов
/ 10 февраля 2012

У вас есть требуемая сигнатура типа, но вы не знаете, есть ли такая функция.Решением этой проблемы является использование Hoogle , поисковой системы для API Haskell, которая позволяет искать функции по типу .

Например, если вы введите (a -> Bool) -> Map k a -> Map k a в Hoogle , верхний результат - Data.Map.filter, который в данном случае именно тот, который вам нужен.

Это также довольно хорошо обобщает, поэтомудаже если тип не соответствует точно, вы все равно найдете что-то, что будет работать в первых нескольких совпадениях.

Так что в следующий раз, когда вы ищете функцию, попробуйте сначала добавить ее в список.!

6 голосов
/ 10 февраля 2012

Data.Map.filter

В будущем вы можете использовать Hoogle , чтобы ответить на эти вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...