问题标签 [lenses]

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 回答
1763 浏览

haskell - Control.Lens 中的“非法多态或限定类型”

我正在与Control.Lens. 我正在编写的实际功能相当复杂,但出于这个问题的目的,我将其归结为一个最小的失败示例:

这无法编译,产生以下错误消息:

为什么这是非法的?它似乎与以下内容非常相似,它确实可以编译:

所以我假设不同之处在于Lens. 但是Lens类型使exampleFunc' 的类型非法呢?我有一个偷偷摸摸的怀疑它与Functor定义中的限定有关Lens,但我可能是错的。作为参考,定义Lens

那么,我是否必须以某种方式满足Functor我的定义中的资格exampleFunc?如果是这样,怎么做?我没有看到在我的类型签名中我有机会声明这个约束。Functor或者也许我走错了路,我的问题与约束无关。

我已经阅读了有关“非法多态等”错误消息的所有 Stack Overflow 问题。也许这是我对 Haskell 展示不熟悉,但我看不出任何这些问题适用于我目前的情况。

我也无法找到有关错误消息一般含义的任何文档。

0 投票
1 回答
342 浏览

scalaz - 链接 Scalaz 镜头集操作

我正在尝试学习 scalaz7 镜头。有没有更好的方法来链接集合操作?

更新:

我有一种感觉,答案可能是使用 state monad,尽管我几乎不明白为什么这似乎有效。有兴趣知道是否有更整洁的方法。

0 投票
2 回答
1291 浏览

haskell - 在 Haskell 中使用 Lens 修改值

我发现自己经常使用这种模式:

这似乎是 Control.Lens 应该能够做的事情,但我想我还没有找到合适的操作员。有没有更好的办法?另外,在这段代码中我还应该做些什么不同的事情吗?

0 投票
1 回答
85 浏览

haskell - 镜头生成是否应该被视为实例

我在另一个库中定义了一个数据类型。我想用 Control.Lens 库生成的镜头连接到该数据类型。

我是否需要在我的代码中重新输入我的类型,或者是否可以安全地使用已定义的数据类型?

0 投票
1 回答
200 浏览

haskell - 如何组合镜头和函子?

我正在努力适应lensHaskell 的库,并发现自己在一些简单的问题上苦苦挣扎。例如,假设(为方便起见)at_1具有以下类型(至少我是这样理解它们的):

如何将这些镜头组合成具有以下类型的镜头:

0 投票
2 回答
377 浏览

ruby - 这是什么镜头组合器?

我正在用 Ruby 制作一个镜头组合器,但我不知道它的普遍接受的名称是什么。未知函数由两个具有相同源类型的镜头组成,它们的目标类型(使用 Benjamin C. Pierce 的术语)是一个哈希映射。未知函数接收这两个镜头并返回一个与原始镜头具有相同源类型和目标类型的新镜头。

它看起来像这样(Ruby 语法):

我正在尝试构建的组合器的图表可以在此演示文稿的幻灯片 18 上看到(幻灯片的标题是“合并?”)。

我查看了 Haskell 的镜头文档(我能理解的一小部分),但我不知道这是哪个组合器。

上面的 unknown_function 的标准名称是什么?如果这个镜头没有标准的名字,有没有几个标准的函数可以组合成它?如果没有,我可能会称之为合并。

0 投票
2 回答
126 浏览

haskell - 如何在镜头中获取功能类型检查

我一直在阅读这篇文章以了解镜头。他们最初定义了一个类型同义词,如下所示:

const 定义如下:

get函数如何进行类型检查:

getConst 的类型是这样的:

我猜的类型r Const是这样的:

那么两者是如何getConst组成r Consta -> b呢?

0 投票
1 回答
827 浏览

scala - scala无定形镜片不工作

在我的项目中,我遇到了需要对作为案例类实例的不可变对象执行嵌套更新的情况。

首先,我只是想使用copy案例类提供的功能,但后来我偶然发现了镜头。我查看了实现ShapelessScalaz决定我将尝试使用来自的镜头Shapeless,所以我抓住了依赖项,添加"com.chuusai" % "shapeless" % "2.0.0" cross CrossVersion.full到我的build.sbt并尝试根据以下可用示例编写一些简单的东西GitHubhttps ://github.com/milessabin/shapeless/wiki /功能概述:-shapeless-2.0.0#boilerplate-free-lenses-for-arbitrary-case-classes

但在编译过程中,我收到如下错误:

可能我遗漏了一些明显的东西,因为我从 wiki 复制粘贴了一个示例。

编辑:在 Travis 发表评论后,我使用https://github.com/jrudolph/sbt-dependency-graph为我的项目生成了依赖关系图,我观察到它spray-routing已经包含shapeless库:

所以我删除了我的依赖并尝试了https://github.com/milessabin/shapeless/blob/scala-2.9.x/examples/src/main/scala/shapeless/examples/lenses.scala中的示例,现在它可以正常工作了.

0 投票
1 回答
682 浏览

python - openCV Python相机校准 - 裁剪和投资回报率

我正在使用 OpenCV-Python 来纠正图片上的镜头失真。我使用本教程中给出的脚本。

如果我在脚本作者提供的图片上应用脚本,它的工作原理。

但是,如果我使用自己的图片,我可以得到一个 ROI = (0,0,0,0) 或一个 ROI,这样作物就不好。

我不明白为什么。我不知道该怎么办 :。/

  • 有没有特定的方法来拍摄棋盘?
    • 棋盘应该离相机近/远?
    • 我应该拍几张照片?
    • 相机不应该移动?
  • 我应该在某个地方定义我的棋盘格的大小吗?

预先感谢您的回答。

M。

0 投票
3 回答
340 浏览

haskell - 使用镜头两次

我正在努力使用该lens库来解决特定问题。我试图通过

  1. 更新的数据结构
  2. 聚焦于更新结构的一部分

到另一个函数,g. 我同时传递了镜头和数据结构,因为g需要数据结构中的一些共享信息以及一条信息。(如果有帮助,数据结构包含有关联合概率分布的信息,但g仅适用于任一边缘,并且需要知道我正在查看哪个边缘。两个边缘之间的唯一区别是它们与其余定义的平均值在数据结构中共享)。

我的第一次尝试看起来像这样

但是在编译过程中失败了,因为f被推断为Identity用于更新和Const Double获取器。

完成我想做的事情的最佳方法是什么?我可以想象能够执行以下操作之一:

  1. 制作镜头的副本,以便在每种情况下类型推断都不同
  2. 我没有传递更新的结构和镜头,而是传递了原始结构和一个返回修改值的镜头(如果我只想更新镜头所看到的结构部分)。
  3. 为我的函数/数据结构做出更好的设计选择
  4. 完全不同的东西

谢谢你的帮助!