Обход / линза с побочным эффектом монады - PullRequest
1 голос
/ 16 июня 2019

У меня есть обход mytraversal и функция f: a -> a, которую я могу использовать следующим образом: mydata & mytraversal %~ f.

Однако, что мне использовать, если вместо монеты у меня есть f: a -> m a m? В моем случае это монада состояний, и я хочу изменить элементы структуры, изменяя текущее состояние.

1 Ответ

4 голосов
/ 16 июня 2019
type Traversal s t a b = forall f. Applicative f => (a -> f b) -> s -> f t

Так что, на самом деле, просто

mydata & mytraversal f

должно быть.Если вам нужен оператор, он называется (%%~).

mydata & mytraversal %%~ f
...