许多类型的光学元件都具有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
”
是否可以将Optional
van Laarhoven函数表示为?
Functor
和Applicative
用liftA2
,但没有纯粹的,那么这将定义与视神经一对多目标?这有名字吗?