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?