许多类型的光学元件都具有van Laarhoven表示。
例如,Lens类型的a Lens s t a b 可以表示为:
Functor f => (a -> f b) -> s -> f t
类似地Traversal,可以用类似的方式表示,将Functor约束交换为Applicative:
Applicative f => (a -> f b) -> s -> f t
几种光学框架(例如Monocle和Arrow)定义了一种类型Optional。
在《单片眼镜光学》中,层次结构 Optional介于Lens和之间Traversal
根据我的理解:如果Traversal是像一个Lens可能具有零到多个目标,那么Optional就像是一个Lens可能具有零到一的目标。
在Monocle中,Optional定义为一对功能:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Monocle源代码中的注释表明,也可以将“表示Optional为越来越PLens弱PPrism”
是否可以将Optionalvan Laarhoven函数表示为?
Functor和Applicative用liftA2,但没有纯粹的,那么这将定义与视神经一对多目标?这有名字吗?