Molti tipi di ottica hanno una rappresentazione di Van Laarhoven.
Ad esempio, un Lenstipo 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 Functorvincolo 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 LenseTraversal
A quanto ho capito: se a Traversalè come uno Lensche può avere zero a molti obiettivi, allora Optionalè come uno Lensche 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ù PLensdebole PPrism"
È possibile rappresentare una funzione Optionalcome van Laarhoven?
FunctoreApplicativeconliftA2, ma non pura, ciò definirebbe un'ottica con uno o più obiettivi? Questo ha un nome?