许多类型的光学都有范拉霍温表示。
例如,类型为Lens的Lens s t a b可以表示为:
Functor f => (a -> f b) -> s -> f t类似地,可以用类似的方式表示Traversal,将Functor约束替换为Applicative
Applicative f => (a -> f b) -> s -> f t几个光学框架,如单片和箭头,定义了一种名为Optional的类型。
“一元论”中的光学传家宝 Optional介于Lens和Traversal之间
据我所知:如果一个Traversal就像一个可能有零到多个目标的Lens,那么Optional就像一个可能有零到一个目标的Lens。
在Monocle中,Optional被定义为一对函数:
getOrModify :: s -> Either t a
set :: (b, s) -> tMonocle源代码中的注释认为,也有可能将Optional表示为“弱PLens,弱PPrism”
是否可以将Optional表示为van函数?
发布于 2019-10-27 21:59:32
如果函子/应用程序/Monad层次结构更细粒度,就有一种方法来表示它。特别是:
class Functor f => Pointed f where
pure :: a -> f a
type Optional s t a b = forall f. Pointed f => (a -> f b) -> s -> f t请注意,如果该类型在类层次结构中整洁,则可能会在透镜库中命名为Affine。
https://stackoverflow.com/questions/58583458
复制相似问题