问题标签 [haskell-lens]

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 投票
3 回答
258 浏览

haskell - 为自定义镜头编写类别实例

我一直在阅读这篇文章以了解 Lenses。我知道这与 Edward Knett 的镜头包不同,但它对基础知识很有用。

因此,A Lens 的定义如下:

有人提到镜头形成一个类别,我一直在尝试为Categorytypeclass 创建一个实例。首先,我为函数编写了类型定义:

在此之后,我只是盯着它一整天。编写它的定义的思考过程到底是什么?

0 投票
1 回答
293 浏览

haskell - Lens 中是否有这样的捷径?

镜头库中是否有此快捷方式?

也许这是一个愚蠢的问题,但感觉就像一个足够基本的结构,应该有一条捷径。

0 投票
1 回答
228 浏览

haskell - 使用有状态镜头将值插入 Set

在另一个自学ekmett 镜头库的尝试中,我正在修改一个简单的基于文本的刽子手游戏,以使用镜头而不是记录更新。代码本身有效,但我遇到了一个地方,我觉得我使用镜头库不正确。这段代码可以正常工作,但它对我来说并不像我见过的所有镜头教程那样优雅。

首先,我的类型:

我困扰的功能是我处理从用户那里获得的猜测:

我基本上没问题

但是下一行,将猜测插入当前的猜测集似乎是一种迂回的方式。必须获取当前设置,插入,然后再次设置它听起来不像“镜头的做事方式”,特别是当我必须做的所有事情之前增加wrongGuesses计数器的行是 use += 1

有一个更好的方法吗?

0 投票
1 回答
573 浏览

haskell - Haskell图表库中如何设置轴的范围

在 haskell-chart 中,如何更改轴的范围?似乎它与镜头和视口有关,但作为 Haskell 的初学者,我很难阅读 API:

http://hackage.haskell.org/package/Chart-0.14/docs/Graphics-Rendering-Chart-Axis-Types.html

谢谢你的帮助!

0 投票
2 回答
129 浏览

json - 将 Haskell JSON Lens 表达式转换回 JSON

如何为以下 Aeson Lens 表达式添加后缀

这样结果是 a Value(带有Object构造函数)而不是String?

0 投票
2 回答
126 浏览

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

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

const 定义如下:

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

getConst 的类型是这样的:

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

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

0 投票
1 回答
2115 浏览

haskell - 为什么类型同义词中的类约束需要 RankNTypes

这编译得很好:

但是当我引入类约束时,编译器要求RankNTypes包含:

包含该扩展后,它编译得很好。为什么编译代码需要该扩展?

编辑:为什么我首先需要约束?

我从这篇文章中检查了这个 Lens 类型 ( type RefF a b = Functor f => (b -> f b) -> (a -> f a)) ,发现由于约束它实际上需要它。RankNTypesFunctor

0 投票
1 回答
63 浏览

haskell - 追查函数偏应用的类型

我一直在检查它的类型Lens以了解它,并且无法确定那里的部分应用程序的结果类型。

初始类型是这样的:type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a)

上面申请的Identityfunctor类型变成了这样:

它们的修改函数定义如下:

我将上述定义单独分解以更好地理解它。

从上面,类型Identity . mb -> Identity b

我什至使用类型检查器验证了这一点:

现在,我尝试制定r (Identity . m). 这里是我的头脑变得空虚的地方。部分应用的实际结果r (Identity . m)似乎a -> Identity a如下类型检查:

一个人如何在心理上解决这个问题?当我尝试部分适用che于 时r,它似乎不适合:

怎么查出偏应用r che(a -> Identity a)

0 投票
2 回答
348 浏览

haskell - 镜头和单态性限制

我一直在研究本文中给出的用于创建镜头的示例。

Lens按照文章中所述创建,以下是我的代码:

现在,除非我包含以下代码,否则此代码不会进行类型检查:

但是在文章中没有任何地方,我可以发现他们提到了单态限制。那么这是正常的事情还是我在这里做错了什么?

使用的编译器:GHC 7.6.2

0 投票
2 回答
374 浏览

haskell - 镜头:在镜头上下文中向后和 (.) 组合

我一直在阅读这篇文章,并在其中一个部分中指出:

镜头向后构图。我们不能让(.)行为像函数吗?

你是对的,我们可以。我们不是出于各种原因,但直觉是对的。镜头应该像功能一样组合。重要的一件事是 id 可以在不影响任何镜头的情况下预先或后期组合任何镜头。

镜头向后组合是什么意思?

另外,这是什么意思:我们不能让(.)行为像函数吗?

(.)是一个函数,通过将它与 Lens 一起使用,它是否会(.)表现得像其他东西?