Viele Arten von Optiken haben eine Van-Laarhoven-Darstellung.
Beispielsweise kann ein LensTyp Lens s t a b wie folgt dargestellt werden:
Functor f => (a -> f b) -> s -> f t
In Traversalähnlicher Weise kann a auf ähnliche Weise dargestellt werden, wobei die FunctorEinschränkung gegen Folgendes ausgetauscht wird Applicative:
Applicative f => (a -> f b) -> s -> f t
Mehrere Optik-Frameworks wie Monocle und Arrow definieren einen Typ namens Optional.
In Monocles Optik Optional passt die Erbe zwischen LensundTraversal
So wie ich es verstehe: Wenn a Traversalwie a ist Lens, das null bis viele Ziele haben kann, dann Optionalist a wie a Lens, das null bis eins Ziele haben kann.
In Monocle Optionalwird als ein Funktionspaar definiert:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Kommentare im Monocle-Quellcode legen nahe, dass es auch möglich ist, ein Optional"als schwächer PLensund schwächer PPrism" darzustellen.
Ist es möglich, eine Optionalals van Laarhoven-Funktion darzustellen?
FunctorundApplicativemitliftA2, aber keine reine hätte, dann würde dies eine Optik mit einem bis vielen Zielen definieren? Hat das einen Namen?