【发布时间】:2021-02-14 10:17:13
【问题描述】:
This article by Chris Penner谈“枯萎光学”;可用于从结构中过滤项目的光学元件。
本文对这些光学元件使用以下“Van Laarhoven”表示:
type Wither s t a b = forall f. Alternative f => (a -> f b) -> s -> f t
大多数(如果不是全部)Van Laarhoven 光学具有等效的 profunctor 表示。例如镜头:
type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
相当于:
type Lens s t a b = forall p. Strong p => p a b -> p s t
Wither 也有 Profactor 代表吗?如果是这样,它是什么?
【问题讨论】:
-
有趣的问题!我的第一个想法是它只是
Choice加上其他东西,也就是说,我认为你想用Prism过滤,但有一些额外的限制。例如,我认为您不能返回任何未通过您过滤的谓词的元素,否则它不是有效的Traversal。也可能与At之类的索引光学器件有某种关系——我可以将过滤器视为将结构“划分”为两半,即通过谓词的部分和不通过谓词的部分。
标签: haskell lenses profunctor