Что эквивалентно `span` с использованием` lens`? - PullRequest
4 голосов
/ 28 апреля 2019

Допустим, у меня есть

data SumType = A | B | C

list = [A, B, B, A, C, A]

(as, rest) = span (\case A -> True; _ -> False) list

Если у меня есть призма _A, есть ли способ написать это более кратко, используя lens?

1 Ответ

6 голосов
/ 28 апреля 2019

Можно сказать, что

(as, rest) = break (isn't _A) list

isn't определено в Control.Lens.Prism .К сожалению, похоже, нет соответствующей функции is' p = not . isn't p, хотя

(as, rest) = span (isRight . matching _A) list

также будет работать.

...