Molti tipi di ottica hanno una rappresentazione di Van Laarhoven.
Ad esempio, un Lens
tipo Lens s t a b
può essere rappresentato come:
Functor f => (a -> f b) -> s -> f t
Allo stesso modo a Traversal
, può essere rappresentato in modo simile, scambiando il Functor
vincolo per Applicative
:
Applicative f => (a -> f b) -> s -> f t
Numerosi framework ottici, come Monocle e Arrow, definiscono un tipo chiamato Optional
.
Nell'ottica di Monocle l'erarchia si Optional
inserisce tra Lens
eTraversal
A quanto ho capito: se a Traversal
è come uno Lens
che può avere zero a molti obiettivi, allora Optional
è come uno Lens
che può avere zero a uno obiettivi.
In Monocolo, Optional
è definito come una coppia di funzioni:
getOrModify :: s -> Either t a
set :: (b, s) -> t
I commenti nel codice sorgente Monocle suggeriscono che è anche possibile rappresentare un Optional
"come sempre più PLens
debole PPrism
"
È possibile rappresentare una funzione Optional
come van Laarhoven?
Functor
eApplicative
conliftA2
, ma non pura, ciò definirebbe un'ottica con uno o più obiettivi? Questo ha un nome?