问题标签 [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.
haskell - 为自定义镜头编写类别实例
我一直在阅读这篇文章以了解 Lenses。我知道这与 Edward Knett 的镜头包不同,但它对基础知识很有用。
因此,A Lens 的定义如下:
有人提到镜头形成一个类别,我一直在尝试为Category
typeclass 创建一个实例。首先,我为函数编写了类型定义:
在此之后,我只是盯着它一整天。编写它的定义的思考过程到底是什么?
haskell - Lens 中是否有这样的捷径?
镜头库中是否有此快捷方式?
也许这是一个愚蠢的问题,但感觉就像一个足够基本的结构,应该有一条捷径。
haskell - 使用有状态镜头将值插入 Set
在另一个自学ekmett 镜头库的尝试中,我正在修改一个简单的基于文本的刽子手游戏,以使用镜头而不是记录更新。代码本身有效,但我遇到了一个地方,我觉得我使用镜头库不正确。这段代码可以正常工作,但它对我来说并不像我见过的所有镜头教程那样优雅。
首先,我的类型:
我困扰的功能是我处理从用户那里获得的猜测:
我基本上没问题
但是下一行,将猜测插入当前的猜测集似乎是一种迂回的方式。必须获取当前设置,插入,然后再次设置它听起来不像“镜头的做事方式”,特别是当我必须做的所有事情之前增加wrongGuesses
计数器的行是 use += 1
。
有一个更好的方法吗?
haskell - Haskell图表库中如何设置轴的范围
在 haskell-chart 中,如何更改轴的范围?似乎它与镜头和视口有关,但作为 Haskell 的初学者,我很难阅读 API:
http://hackage.haskell.org/package/Chart-0.14/docs/Graphics-Rendering-Chart-Axis-Types.html
谢谢你的帮助!
json - 将 Haskell JSON Lens 表达式转换回 JSON
如何为以下 Aeson Lens 表达式添加后缀
这样结果是 a Value
(带有Object
构造函数)而不是String
?
haskell - 如何在镜头中获取功能类型检查
我一直在阅读这篇文章以了解镜头。他们最初定义了一个类型同义词,如下所示:
const 定义如下:
get
函数如何进行类型检查:
getConst 的类型是这样的:
我猜的类型r Const
是这样的:
那么两者是如何getConst
组成r Const
的a -> b
呢?
haskell - 为什么类型同义词中的类约束需要 RankNTypes
这编译得很好:
但是当我引入类约束时,编译器要求RankNTypes
包含:
包含该扩展后,它编译得很好。为什么编译代码需要该扩展?
编辑:为什么我首先需要约束?
我从这篇文章中检查了这个 Lens 类型 ( type RefF a b = Functor f => (b -> f b) -> (a -> f a)
) ,发现由于约束它实际上需要它。RankNTypes
Functor
haskell - 追查函数偏应用的类型
我一直在检查它的类型Lens
以了解它,并且无法确定那里的部分应用程序的结果类型。
初始类型是这样的:type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a)
上面申请的Identity
functor类型变成了这样:
它们的修改函数定义如下:
我将上述定义单独分解以更好地理解它。
从上面,类型Identity . m
是b -> Identity b
我什至使用类型检查器验证了这一点:
现在,我尝试制定r (Identity . m)
. 这里是我的头脑变得空虚的地方。部分应用的实际结果r (Identity . m)
似乎a -> Identity a
如下类型检查:
一个人如何在心理上解决这个问题?当我尝试部分适用che
于 时r
,它似乎不适合:
怎么查出偏应用r che
是(a -> Identity a)
haskell - 镜头和单态性限制
我一直在研究本文中给出的用于创建镜头的示例。
我Lens
按照文章中所述创建,以下是我的代码:
现在,除非我包含以下代码,否则此代码不会进行类型检查:
但是在文章中没有任何地方,我可以发现他们提到了单态限制。那么这是正常的事情还是我在这里做错了什么?
使用的编译器:GHC 7.6.2
haskell - 镜头:在镜头上下文中向后和 (.) 组合
我一直在阅读这篇文章,并在其中一个部分中指出:
镜头向后构图。我们不能让
(.)
行为像函数吗?你是对的,我们可以。我们不是出于各种原因,但直觉是对的。镜头应该像功能一样组合。重要的一件事是 id 可以在不影响任何镜头的情况下预先或后期组合任何镜头。
镜头向后组合是什么意思?
另外,这是什么意思:我们不能让(.)
行为像函数吗?
(.)
是一个函数,通过将它与 Lens 一起使用,它是否会(.)
表现得像其他东西?