问题标签 [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.
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))
我们有一些类似的M
so 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
.
typeclass - 为什么定义一个具有未知值的 Choice 实例失败?
更新:我在这里内联代码。
我正在尝试通过调用定义Data.Profunctor.Choice
where的实例,但由于某种原因,编译器抱怨这是未知的。right
left
left
可能是一个愚蠢的错误,但我一直在查看我的代码很长时间,我无法弄清楚出了什么问题。
(次要且不相关:在 for 的Right
情况下left
,我必须解包并重新打包该值以使其类型对齐。添加类型归属也无法编译。)
奇怪的是,我对 做同样的事情没有问题Strong
,请参阅:
haskell - Profunctor 的哪些属性不能进入 Haskell/PureScript?
在他们关于profunctor optics的论文中,Pickering 等人。声明
术语“profunctor”来自范畴论,尽管许多范畴结构在翻译中丢失了。
这对我来说似乎很奇怪而且有点独特,因为我知道的其他代数结构(对、幺半群、函子、类别等)在 Haskell 和 PureScript 等语言中“似乎”没有遭受同样的命运——用引号是因为我很高兴被证明是错误的。
前段时间,我和 Profunctor 家族玩了一会儿,发现他们非常容易处理,尤其是在光学方面。在看到它们出现在 monad 转换器的上下文中后,我的兴趣再次被激发。我需要重新观看几次,因为我不了解细节,但原则上它是非常清楚的。所以我不禁想知道:
- 这些属性是什么?为什么它们不体现在语言中?
- 如果可能的话,需要付出什么努力才能让他们参与进来?
- 这样做有什么好处?特别是,他们能帮助解决 Ed 在演讲结束时提到的问题吗?
haskell - 笛卡尔(Profunctor)的例子?
我正在浏览以下代码示例,发现一旦他们实现“第一”并成为 Cartisian 的成员,就很难弄清楚如何使用 (->) 和 (Star f)。
任何人都可以提供一些易于理解的例子吗?谢谢。
haskell - 强和封闭的profunctors的泛化
我在看强和封闭的profunctors类:
((,)
是一个对称双函子,所以它等同于“profunctors”包中的定义。)
我注意到两者(->) a
并且(,) a
是内函子。它似乎Strong
并Closed
具有类似的形式:
确实,如果我们看一下法律,有些法律也有类似的形式:
这些都是一般情况的特例吗?
haskell - 为什么不能在 GHC 中强制超功能?
我有以下类型,它基于论文Cooutining folds with hyperfunctions:
它的第一个参数是逆变的,第二个参数是协变的,所以它是一个 profunctor:
我还想实现(可能不安全的)强制运算符:
但是,当我这样做时,我收到以下错误消息:
我猜它正在尝试验证Coercible (Hyper a b) (Hyper a c)
,这需要Coercible b c
and Coerrcible (Hyper c a) (Hyper b a)
,而后者需要Coercible (Hyper a b) (Hyper a c)
,但它进入了一个无限循环。
知道我会用什么注释来解决这个问题,如果有的话?还是我应该硬着头皮使用unsafeCoerce
?
haskell - Opaleye 中跨链接表的数组聚合
我正在尝试构建与以下 SQL 匹配的 Opaleye 查询:
涉及的表格(简化)是:
我的目标是查询附加了一个或多个标签的文章,并将所有附加标签作为数组检索。
到目前为止,我得到了以下基本查询:
但是,我无法使聚合工作:以下内容不进行类型检查,并且我不明白如何使用上述查询组合此聚合:
在一些博客文章和 GitHub 问题中,我发现聚合不适用于 Product-Profunctors 和 Arrows,因此不能包含在箭头查询中。然而,我对 Haskell 比较陌生,并没有真正理解这两个库背后的理论(似乎没有适合初学者的文档);因此,我无法提出如何将查询与聚合相结合的一般结构。William Yao here有一些示例,但我不了解一般概念,因此无法将这些示例应用于我的问题。
如果有人可以提供有关如何在 Opaleye 中使用常规查询组合聚合的见解,我将不胜感激,谢谢!
haskell - “凋零”的 Profunctor 表示是什么?
Chris Penner 的这篇文章谈到了“Witherable Optics”;可用于从结构中过滤项目的光学元件。
本文对这些光学器件使用以下“Van Laarhoven”表示:
大多数(如果不是全部)Van Laarhoven 光学具有等效的 profunctor 表示。例如镜头:
相当于:
是否Wither
也有生产者代表?如果是这样,那是什么?
function - (->) 的 Profunctor 实例定义 dimap 和 lmap/rmap 有什么原因吗?
在Hackage 的源代码中,我读到:
dimap
但是// for the的默认实现只需要定义and , or lmap
; 定义所有这些是不必要的。rmap
Profunctor
lmap
rmap
dimap
相反,是否有理由将它们全部定义?