Багато типів оптики мають представлення ван Лаарховена.
Наприклад, 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
, але не чистий, то це визначало б оптику з однією до багатьох цілей? Чи має це ім’я?