Muchos tipos de óptica tienen una representación de Van Laarhoven.
Por ejemplo, un Lenstipo Lens s t a b puede representarse como:
Functor f => (a -> f b) -> s -> f t
Del mismo modo Traversal, a , se puede representar de manera similar, intercambiando la Functorrestricción por Applicative:
Applicative f => (a -> f b) -> s -> f t
Varios marcos ópticos, como Monocle y Arrow definen un tipo llamado Optional.
En la óptica de Monocle, la jerarquía se Optional ajusta entre LensyTraversal
Según tengo entendido: si un Traversales como un Lensque puede tener cero a muchos objetivos, entonces un Optionales como un Lensque puede tener cero a uno objetivos.
En Monocle, Optionalse define como un par de funciones:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Los comentarios en el código fuente de Monocle sugieren que también es posible representar un Optional"como cada PLensvez más débil PPrism"
¿Es posible representar un Optionalcomo una función de van Laarhoven?

FunctoryApplicativeconliftA2, pero no pura, entonces eso definiría una óptica con uno a muchos objetivos? esto tiene nombre?Applyen el paquete "semigroupoids". hackage.haskell.org/package/semigroupoids-5.3.3/docs/…lenspaquete se llamaTraversal1type Optional s t a bes realmente la representación correcta para esa óptica y que todas las leyes apropiadas son válidas? Esto parece un truco mágico. ¿Por qué fuePointedy no, digamosCopointed? Para otra óptica dada, ¿cómo podemos adivinar la representación correcta del profunctor?