Многие виды оптики имеют представление Ван Ларховена.
Например, Lens
тип Lens s t a b
может быть представлен как:
Functor f => (a -> f b) -> s -> f t
Аналогично, a Traversal
может быть представлен аналогичным образом, поменяв местами Functor
ограничение Applicative
:
Applicative f => (a -> f b) -> s -> f t
Несколько оптических платформ, таких как Monocle и Arrow, определяют тип с именем Optional
.
В Оптике Монокля иерархия Optional
подходит между Lens
иTraversal
Как я понимаю: если a Traversal
похож на a Lens
, у которого может быть от нуля до многих целей, то a Optional
похож на a Lens
, у которого может быть от нуля до одной цели.
В Monocle Optional
определяется как пара функций:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Комментарии в исходном коде Monocle предполагают, что также можно представлять Optional
«как все слабее PLens
и слабее PPrism
»
Можно ли представить Optional
функцию Ван Ларховена?
Functor
иApplicative
сliftA2
, но не чистый, то это определило бы оптику с одной ко многим целям? У этого есть имя?