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