Многие виды оптики имеют представление Ван Ларховена.
Например, 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, но не чистый, то это определило бы оптику с одной ко многим целям? У этого есть имя?