许多类型的光学器件都有 van Laarhoven 表示。
例如,Lens
类型的 aLens s t a b
可以表示为:
Functor f => (a -> f b) -> s -> f t
类似地 aTraversal
可以用类似的方式表示,将Functor
约束交换为Applicative
:
Applicative f => (a -> f b) -> s -> f t
一些光学框架,例如Monocle和Arrow定义了一个名为Optional
.
在 Monocle 的光学层次结构 Optional
中,介于Lens
和Traversal
据我了解:如果 aTraversal
就像 aLens
可能有零到多个目标,那么 anOptional
就像 aLens
可能有零到一个目标。
在 Monocle 中,Optional
定义为一对函数:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Monocle 源代码中的注释表明,它也可以表示Optional
“越来越PLens
弱PPrism
”
是否可以将 an 表示Optional
为 van Laarhoven 函数?