- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
至少有三个流行的库用于访问和操作记录字段。我所知道的有:数据访问器、fclabels 和镜头。
我个人从数据访问器开始,现在正在使用它们。然而,最近在 haskell-cafe 上,有人认为 fclabels 更胜一筹。
因此,我对这三个(也许更多)库的比较感兴趣。
最佳答案
我知道至少有 4 个库提供镜头。
镜头的概念是它提供了一些同构的东西
data Lens a b = Lens (a -> b) (b -> a -> a)
get (Lens g _) = g
put (Lens _ s) = s
get l (put l b a) = b
put l (get l a) a = a
put l b1 (put l b2 a) = put l b1 a
a :-> b
可以直接翻译成上述类型。它提供了一个
Category
(:->)
的实例这很有用,因为它允许您组合镜头。它还提供了一个无法无天的
Point
type 概括了这里使用的镜头的概念,以及一些处理同构的管道。
fclabels
的一个障碍是主包包括模板-haskell 管道,所以包不是 Haskell 98,它还需要(相当无争议)
TypeOperators
扩展名。
data-accessor
不再使用这种表示形式,而是转为类似于
data-lens
的形式。 .不过,我保留这个评论。]
fclabels
更受欢迎,部分是因为它是 Haskell 98。然而,它对内部表示的选择让我有点吐槽。
T
它用来表示一个镜头在内部定义为
newtype T r a = Cons { decons :: a -> r -> (a, r) }
get
镜头的值,您必须为“a”参数提交一个未定义的值!这让我觉得这是一个非常丑陋和临时的实现。
Category
比如,如果你不注意香肠是如何制作的,这个包实际上是很合理的选择。
newtype Lens s t = Lens (forall a. State t a -> State s a)
Category
例如镜头,它可以让你用
.
组合它们.该实现还需要多参数类型类。
Category
例如,巴洛克式编码,以及 main 包中的 template-haskell 要求,这是我最不喜欢的实现。
data-lens
套餐提供镜头方面的
Store共和。
newtype Lens a b = Lens (a -> Store b a)
data Store b a = Store (b -> a) b
newtype Lens a b = Lens (a -> (b, b -> a))
fclabels
中的操作更有效。定义,尤其是当访问器被链接时。
l
下降到 2 个很好的 pointfree 等价物:
extract . l = id
duplicate . l = fmap l . l
Functor
is to Lens
as Applicative
is to Biplate
: Introducing Multiplate 中首次注意到并描述了这种方法。并且是
blogged about based on a preprint通过杰里米吉本斯。
Data.Map
.
data-lens
中的镜片形成
Category
(与
lenses
包不同),是 Haskell 98(与
fclabels
/
lenses
不同),是理智的(与
data-accessor
的后端不同)并提供稍微更有效的实现,
data-lens-fd
为那些愿意走出 Haskell 98 的人提供使用 MonadState 的功能,现在可以通过
data-lens-template
获得模板-haskell 机制。 .
data Iso a b = Iso { hither :: a -> b, yon :: b -> a }
hither . yon = id
, 和
yon . hither = id
data Lens a b = forall c. Lens (Iso a (b,c))
(.)
组合在一起。和
id
,即使没有
Category
使用实例
type Lens a b = forall f. Functor f => (b -> f b) -> a -> f a
_2 f (a,b) = (,) a <$> f b
type LensFamily a b c d = forall f. Functor f => (c -> f d) -> a -> f b
Lens
我在上面定义了
_2
实际上是
LensFamily
.
_2 :: Functor f => (a -> f b) -> (c,a) -> f (c, b)
lens
包裹。
Functor f => (b -> f b) -> a -> f a
的函数即可。 , 对于它们的特定类型 'a' 和 'b'。这大大降低了采用成本。
关于data-structures - 镜头、fclabels、数据访问器——哪个库用于结构访问和变异更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767129/
我有一个包含配对数据的数据集(同一家庭的成员)。 身份证 是个人标识符和 户号是合作伙伴的标识符(反之亦然)。 我需要的是为每个 添加一个额外的列(职业)。 id 他\她的伴侣。 我的数据看起来像这样
mutate 能否根据跨变量应用的逻辑条件创建新变量? 更具体地说,请考虑以下数据。 set.seed(1234) val = 1) head(dat) a b c d anyABCD 1 0 0
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我的 df 看起来像这样: df % mutate_at(vars(starts_with("paid")), list(prc = ~. / expenses)) # expenses mon
我在这里为项目 Euler 问题 31 运行了这个简单的代码。 不需要 Euler Q;我只想知道,为什么我的列表值会发生变化,即这是打印 [2.0,2.0,2.0,2.0,2.0] 的许多列表的列表
我使用了排列和变异组合来根据分组进行添加。例如,我使用了以下内容: master_df % group_by(asof_dt) %>% mutate(tot_flag = sum(ls_fla
我在让 mutate、cross 和 case_when 正常运行时遇到了一些麻烦,我在这里重新创建了一个简单版本的问题: a 1 1 2 3 2 2
我有代表用户某种交易类型的不规则时间序列数据。每行数据都带有时间戳,表示当时的事务。由于数据的不规则性质,某些用户一天可能有100行,而其他用户一天可能有0或1个事务。 数据可能看起来像这样: dat
您如何恰本地解释为什么这两个示例不同? // Reassignment let a = 1; let b = a; a = 2; console.log(b); // → 1 // Mutation
基本上我想做的是发送一个字符串列表 ex: ["aa","bb","vv"] 到 graphql Mutation 字段中,目前这是我的 Mutation Schema "listTest": &gr
使用 dplyr 进行组均值居中的有效/首选方法是什么,即获取组中的每个元素(mutate)并对其执行操作和汇总统计信息(该组的总结)。以下是使用基本 R 以 mtcars 为中心的组均值: do.c
pcd % arrange(tripNo, procDate, delay) %>% group_by(tripNo) %>% mutate(delayErr = (row_number(
我想知道查询类型后面的字符串有什么意义,在这种情况下是“ProvisionQueues”,似乎从字符串中删除它不会影响任何东西——它只是用于日志记录还是什么。元数据? mutation Provisi
所以,我正在尝试设计我的 Apollo 服务器。我想用一个对象作为参数来创建一个突变。 这是我的架构的一个片段,它以某种方式导致了问题: 我认为它在语法上是正确的,但我遇到了这个错误: {"error
CREATE OR REPLACE TRIGGER UPDATE_TEST_280510 AFTER insert on TEST_TRNCOMPVISIT declare V_TRNCOMPNO N
我有以下带有查询和突变的组件,但我的组件没有收到数据和突变 prop。 我的代码是不是做错了什么或遗漏了什么?虽然查询确实得到执行,但它没有传递下去。 this.props.mutate 和 this
我用 Go 编写了一个客户端应用程序,它需要与服务器端的 C 程序进行交互。客户端执行 AES CFB 加密,服务器解密。不幸的是,服务器端存在重用初始化向量的错误。它尝试根据以下条件进行 3 次解密
我的前端是 localhost:3000 ,我的 GraphQL 服务器是 localhost:3333 . 我已经使用 react-apollo 在 JSX 领域中查询/变异,但还没有从 Expre
我试图改变通常情况下来自 kube-scheduler 的资源“绑定(bind)”。 以下是我的“ValidatingWebhookConfiguration”yaml: apiVersion: ad
如所述here , 这是一个 reference implementation用于 kubernetes e2e 测试的 webhook 服务器。在 main 函数中,定义了一些端点来处理不同的突变请
我是一名优秀的程序员,十分优秀!