Wiele rodzajów optyki ma reprezentację van Laarhoven.
Na przykład Lenstyp Lens s t a b może być reprezentowany jako:
Functor f => (a -> f b) -> s -> f t
Podobnie a Traversal, można przedstawić w podobny sposób, zamieniając Functorograniczenie na Applicative:
Applicative f => (a -> f b) -> s -> f t
Kilka szkieletów optyki, takich jak Monocle i Arrow, definiuje typ o nazwie Optional.
W Monocle's Optics heirarchia Optional pasuje między LensiTraversal
Jak rozumiem: jeśli a Traversaljest jak taki, Lensktóry może mieć zero do wielu celów, to Optionaljest jak taki, Lensktóry może mieć zero do jednego celu.
W Monocle Optionaljest zdefiniowany jako para funkcji:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Komentarze w kodzie źródłowym Monocle sugerują, że możliwe jest również przedstawienie Optional„jako słabszego PLensi słabszego PPrism”
Czy można przedstawić Optionalfunkcję van Laarhovena?
FunctoriApplicativezliftA2, ale nie czystą, to zdefiniowałoby to układ optyczny z jednym do wielu celów? Czy to ma imię?