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