De nombreux types d'optiques ont une représentation van Laarhoven.
Par exemple, un Lenstype Lens s t a b peut être représenté comme:
Functor f => (a -> f b) -> s -> f t
De même, a Traversal, peut être représenté de manière similaire, en échangeant la Functorcontrainte pour Applicative:
Applicative f => (a -> f b) -> s -> f t
Plusieurs cadres optiques, tels que Monocle et Arrow, définissent un type appelé Optional.
Dans l'optique de Monocle, la hiérarchie se Optional situe entre LensetTraversal
Si je comprends bien: si un Traversalest comme un Lensqui peut avoir zéro à plusieurs cibles, alors un Optionalest comme un Lensqui peut avoir zéro à une cible.
Dans Monocle, Optionalest défini comme une paire de fonctions:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Les commentaires dans le code source de Monocle suggèrent qu'il est également possible de représenter un Optional"comme de plus en PLensplus faible PPrism"
Est-il possible de représenter une Optionalfonction en tant que van Laarhoven?
FunctoretApplicativeavecliftA2, mais pas pure, cela définirait une optique avec une à plusieurs cibles? Est-ce que cela a un nom?