Как изменить элемент, который соответствует условию, используя линзы? - PullRequest
0 голосов
/ 25 декабря 2018

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

modifyElem
  :: (a -> Bool)      -- predicate function
  -> (a -> a)         -- modification to apply
  -> [a]
  -> [a]

Если возможно,это также может быть обобщено далее:

modifyElem
  :: (Foldable t)     -- or (Traversable t)
  -> (a -> Bool)
  -> (a -> a)
  -> t a
  -> t a

1 Ответ

0 голосов
/ 25 декабря 2018

Попробуйте это:

modifyElem :: Traversable t => (a -> Bool) -> (a -> a) -> t a -> t a
modifyElem predicate transform target =
  target & traverse . filtered predicate %~ transform
...