lens相关内容

您如何使用镜头库来编写依赖于其他镜头的复杂镜头?

目前,我有一个 WorkLog 类型,其中包含开始日期和结束日期。我还想添加一个持续时间镜头,它将从开始和结束日期中派生出来。它应该是只读的,或者改变结束日期,如果它的值被改变了(我想知道如何实现这两个版本,即使我只使用一个)。 这是我的代码。基本上,如果您可以实现 workLogDurationRO 和 workLogDurationRW 函数来获得主要传递中的所有测试,那将回答我的 ..
发布时间:2018-06-05 11:19:57 其他开发

Monadic改变元组

Monad m => (a,b)→> (b→m c)→> m(a,c) 在我看来,这是一些bind(> )和镜头操作。 我知道我可以在绑定后用模式匹配解决这个问题,但我的直觉告诉我,有一种“简单”的方式来利用镜头来写这个。 有没有这样的操作? 解决方案 这绝对是透镜。 monad实际上只是一个分心,因为你需要的只是一个仿函数: $ p $ ch ..
发布时间:2018-06-05 11:09:50 其他开发

如何在不使用Monoid实例的情况下处理Control.Lens.Indexed中的at的Maybe结果

最近我发现了Hackage上的镜头包,并且一直试图在一个小型的测试项目中使用它,如果我继续研究这个项目,它可能会在很遥远的一天变成MUD / MUSH服务器。 下面是我的代码的最小化版本,说明我现在用透镜用于访问键/值容器(Data.Map.Strict,在我的情况) { - #LANGUAGE OverloadedStrings,GeneralizedNewtypeDiving,T ..
发布时间:2018-06-05 10:56:38 其他开发

Haskell:在Getter中使用或使用

在Control.Lens中,我们有可以访问嵌套结构的Getter。 Getter有使用和使用,但我不清楚他们是如何工作的。所以如果有人能够提供一些使用或使用的简单示例,那将会很棒。 为什么我需要知道它?因为我正在阅读一些在Haskell中使用了“实现”,并在其中使用了“uses”和“use”。特别是它说: inRange ..
发布时间:2018-06-05 10:55:04 其他开发

使用makePrisms例子

我不清楚makeLense和makePrisms之间的区别吗? 我知道,当我们想要访问一个嵌套的结构/数据,然后像这样使用makeLense: data Point = Point {_x :: Int,_y :: Int} data Test = Test {_name :: String,_position :: Point} makeLenses''Point ..
发布时间:2018-06-05 10:53:15 其他开发

将镜头传递给功能

如何将镜头正确传递到具有状态的功能?让我们考虑下一个代码: { - #LANGUAGE TemplateHaskell# - } { - #LANGUAGE FlexibleContexts# - } import Control.Lens import Control.Monad.State data Game = Game {_armies :: [Army] ..
发布时间:2018-06-05 10:49:22 其他开发

3型和更多类型之间的同构使用镜头

受 ADT之间多态功能的问题启发我试图在多个(不仅仅是2个)之间创建同构,类型,所以每次我需要一个同构而不是相同的类型时,我可以用一些 convert转换。 假设我有3个ADT: data AB = A | B导出(显示) 数据CD = C | D导出(显示) 数据EF = E | F导出(显示) 使用 $ b $ b { - #LANGUAGE Multi ..
发布时间:2018-06-04 17:28:20 其他开发

组合镜头和棱镜用于产品的总和?

如果我有记录类型,我可以用镜头做任何我想做的事情。如果我有一个总和类型,我可以做任何我想要的棱镜。但是,如果我有一笔包含记录的金额, makeFields 不会将镜头放入字段中(当然),但只能对它们进行遍历。 declarePrisms 似乎更有前景。根据文件, declarePrisms [d | 数据Exp = Lit Int | Var字符串| Lambda {bound :: S ..
发布时间:2018-06-04 17:21:28 其他开发

哈斯克尔使用第一级镜头来创建复杂的镜头

data示例=示例{_position :: Int ,_storage :: [Int]} 我如何构建一个专注于 position 元素在存储中? 另外,是否有可能通过镜片将位置值修改为基于存储大小的范围 好像除了可以以某种方式使用,因为示例同构于一个元组,但我无法理解这种方式。 我不确定如何解释这个问题,所以我找不到相关的信息。 解决方 ..
发布时间:2018-06-04 17:20:30 其他开发

如何将镜片组合成“平行”

我是新来的优秀 Control.Lens ,我试图将2个镜头以“并行”(不按顺序)组合起来,就像我会用` Control.Arrow。&&& amp;& amp; amp; amp; amp; amp; amp; amp; amp; amp;& amp; amp; amp; amp;& amp; amp; amp;& amp; amp; amp;& amp; amp; `data Foo a ..
发布时间:2018-06-04 15:34:05 其他开发

我如何在Haskell中使用镜头来复制Python的枚举?

列表上的Python 枚举可以写成 zip [0 ..] 。我看着Control.Lens.Traversal和Control.Lens.Indexed,但我无法弄清楚如何使用镜头将其推广到任何合理的容器(我毫不犹豫地说“Traversable”)。 我在猜测 itraverse 或 itraverseOf 是关键。 解决方案 如果您使用的是 FunctorWithIndex 实例的 ..
发布时间:2018-06-04 15:29:30 其他开发

如何制作两个镜头的产品?

如果我有两个镜头: foo :: Lens'X Foo bar :: Lens'X Bar 有没有一种方法可以构建产品镜头: foobar :: Lens'X(Foo,Bar) foobar = ... foo bar 或者是不可能的? 解决方案 是不可能的。可能是最常见的情况是,当您将镜头放在记录的不同区域时,镜头不相交,因此您 ..
发布时间:2018-06-04 15:27:44 其他开发

镜头在Comonads或可代表

以下是这个问题的一个更具体的变体:只突出Store Comonad的焦点?,因为不会一次询问多个问题。 是否有与 Control.Lens ,它允许我与一个comonad的焦点进行交互(从 extract )或与Store Comonad的索引/值( pos )? 好像镜片可能是有些在这里使用,但我一直无法找到任何合适的东西;任何帮助将不胜感激,谢谢! 解决方案 Comonad ..
发布时间:2018-06-04 15:23:22 其他开发

如何修改使用带镜头的monadic功能?

我需要一个镜头功能,其功能类似于而不是,但使用一次性操作: overM ::(Monad m)=>镜头s a b - > (a - > m b) - > (s - > mt) 虽然这个函数很容易定义(它实际上只是一个标识模 WrappedMonad ),我想知道在镜头的某个地方定义了这样的函数吗? { - #LANGUAGE RankNTypes# - } ..
发布时间:2018-06-04 15:21:04 其他开发

我可以用Monad约束制作镜头吗?

上下文:这个问题特别提到 Control.Lens (撰写本文时的版本3.9.1) 我一直在使用镜头库,能够读取和写入结构的一块(或遍历片断)是非常好的。然后我想了解一下镜头是否可以用于外部数据库。当然,我需要在 IO Monad 中执行。所以推广: 问题: 给定一个getter,(s - > ma)和setter (b - > s - > mt)其中 m 是一个Monad,可以 ..
发布时间:2018-06-04 15:20:31 其他开发

模拟Haskell中的交互有状态对象

我正在编写一个Haskell程序,它涉及模拟一个抽象机器,它具有内部状态,接受输入并给出输出。我知道如何使用state monad来实现这个功能,这会产生更清洁,更易于管理的代码。 我的问题是我不知道如何拉同样的东西当我有两个(或更多)有状态的对象互相交互时就会诡计多端。下面我给出了一个高度简化版本的问题,并概括了我到目前为止的内容。 为了解决这个问题,我们假设一台机器的内部状态只包含 ..
发布时间:2018-06-04 15:00:31 其他开发

组合镜头

使用透镜库我可以对各个目标应用修改功能,如下所示: Prelude Control.Lens> (1,'a',2)& _1%〜(* 3) (3,'a',2) Prelude Control.Lens> (1,'a',2)& _3%〜(* 3) (1,'a',6) 我可以组合这些单个镜头( _1 和 _3 ),以便能够在一旦?我期待着以下精神: Prelude C ..
发布时间:2018-06-04 14:58:33 其他开发