问题标签 [profunctor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3030 浏览

haskell - profunctors和箭头有什么关系?

显然,每个人Arrow都是一个Strongprofunctor。确实^>>>>^对应于lmaprmap。和和first'second'一样。同样每一个也是。firstsecondArrowChoiceChoice

与箭头相比,profunctors缺乏的是组合它们的能力。如果我们添加合成,我们会得到一个箭头吗?换句话说,如果一个(强)profunctor 也是一个category,它是否已经是一个箭头?如果没有,缺少什么?

0 投票
2 回答
340 浏览

haskell - Profunctor 的自由单子的模拟

我们可以定义data Free f a = Pure a | Free (f (Free f a))等等Functor f => Monad (Free f)

如果我们定义 data T f a b = R a | S b | T (f a (T f a b))我们有一些类似的Mso Profunctor f => M (T f a),在哪里class Profunctor f where dimap :: (a -> b) -> (c -> d) -> f b c -> f a d

自从我注意到Data.Comp.Term.Context并且Free对于Data.Comp.Param.Term.Context.

0 投票
2 回答
66 浏览

typeclass - 为什么定义一个具有未知值的 Choice 实例失败?

更新:我在这里内联代码。

我正在尝试通过调用定义Data.Profunctor.Choicewhere的实例,但由于某种原因,编译器抱怨这是未知的。rightleftleft

可能是一个愚蠢的错误,但我一直在查看我的代码很长时间,我无法弄清楚出了什么问题。

(次要且不相关:在 for 的Right情况下left,我必须解包并重新打包该值以使其类型对齐。添加类型归属也无法编译。)

奇怪的是,我对 做同样的事情没有问题Strong,请参阅:

0 投票
0 回答
370 浏览

haskell - Profunctor 的哪些属性不能进入 Haskell/PureScript?

在他们关于profunctor optics的论文中,Pickering 等人。声明

术语“profunctor”来自范畴论,尽管许多范畴结构在翻译中丢失了。

这对我来说似乎很奇怪而且有点独特,因为我知道的其他代数结构(对、幺半群、函子、类别等)在 Haskell 和 PureScript 等语言中“似乎”没有遭受同样的命运——用引号是因为我很高兴被证明是错误的。

前段时间,我和 Profunctor 家族玩了一会儿,发现他们非常容易处理,尤其是在光学方面。在看到它们出现在 monad 转换器的上下文中后,我的兴趣再次被激发。我需要重新观看几次,因为我不了解细节,但原则上它是非常清楚的。所以我不禁想知道:

  • 这些属性是什么?为什么它们不体现在语言中?
  • 如果可能的话,需要付出什么努力才能让他们参与进来?
  • 这样做有什么好处?特别是,他们能帮助解决 Ed 在演讲结束时提到的问题吗?
0 投票
1 回答
301 浏览

haskell - 笛卡尔(Profunctor)的例子?

我正在浏览以下代码示例,发现一旦他们实现“第一”并成为 Cartisian 的成员,就很难弄清楚如何使用 (->) 和 (Star f)。

任何人都可以提供一些易于理解的例子吗?谢谢。

0 投票
2 回答
287 浏览

haskell - 强和封闭的profunctors的泛化

我在看强和封闭的profunctors类:

((,)是一个对称双函子,所以它等同于“profunctors”包中的定义。)

我注意到两者(->) a并且(,) a是内函子。它似乎StrongClosed具有类似的形式:

确实,如果我们看一下法律,有些法律也有类似的形式:

这些都是一般情况的特例吗?

0 投票
1 回答
158 浏览

haskell - 为什么不能在 GHC 中强制超功能?

我有以下类型,它基于论文Cooutining folds with hyperfunctions

它的第一个参数是逆变的,第二个参数是协变的,所以它是一个 profunctor:

我还想实现(可能不安全的)强制运算符:

但是,当我这样做时,我收到以下错误消息:

我猜它正在尝试验证Coercible (Hyper a b) (Hyper a c),这需要Coercible b cand Coerrcible (Hyper c a) (Hyper b a),而后者需要Coercible (Hyper a b) (Hyper a c),但它进入了一个无限循环。

知道我会用什么注释来解决这个问题,如果有的话?还是我应该硬着头皮使用unsafeCoerce

0 投票
2 回答
60 浏览

haskell - Opaleye 中跨链接表的数组聚合

我正在尝试构建与以下 SQL 匹配的 Opaleye 查询:

涉及的表格(简化)是:

我的目标是查询附加了一个或多个标签的文章,并将所有附加标签作为数组检索。

到目前为止,我得到了以下基本查询:

但是,我无法使聚合工作:以下内容不进行类型检查,并且我不明白如何使用上述查询组合此聚合:

在一些博客文章和 GitHub 问题中,我发现聚合不适用于 Product-Profunctors 和 Arrows,因此不能包含在箭头查询中。然而,我对 Haskell 比较陌生,并没有真正理解这两个库背后的理论(似乎没有适合初学者的文档);因此,我无法提出如何将查询与聚合相结合的一般结构。William Yao here有一些示例,但我不了解一般概念,因此无法将这些示例应用于我的问题。

如果有人可以提供有关如何在 Opaleye 中使用常规查询组合聚合的见解,我将不胜感激,谢谢!

0 投票
1 回答
174 浏览

haskell - “凋零”的 Profunctor 表示是什么?

Chris Penner 的这篇文章谈到了“Witherable Optics”;可用于从结构中过滤项目的光学元件。

本文对这些光学器件使用以下“Van Laarhoven”表示:

大多数(如果不是全部)Van Laarhoven 光学具有等效的 profunctor 表示。例如镜头:

相当于:

是否Wither也有生产者代表?如果是这样,那是什么?

0 投票
1 回答
83 浏览

function - (->) 的 Profunctor 实例定义 dimap 和 lmap/rmap 有什么原因吗?

Hackage 的源代码中,我读到:

dimap但是// for the的默认实现只需要定义and , or lmap; 定义所有这些是不必要的。rmapProfunctorlmaprmapdimap

相反,是否有理由将它们全部定义?