gpt4 book ai didi

elm - 榆树有像镜头一样的haskell或类似的东西吗?

转载 作者:行者123 更新时间:2023-12-04 15:08:55 26 4
gpt4 key购买 nike

在haskell中,我使用镜头库。榆树有类似的东西吗?
如果我有这个 elm 数据结构,我如何将 3 添加到 test.a.b .

test = {
a = {
b = 5
}
}

在haskell中我会写: test & a.b ~% (+3) .
在haskell中我可以写 makeLenses ''RecordName并自动生成镜头,榆树有吗?

最佳答案

有点。它有 Focus图书馆。它可以让你说这样的话:

Focus.update (a => b) ((+) 3) test

...将三个添加到 test.a.b .它有两个缺点。首先是您必须手工制作镜头。这没什么大不了的。为您 test上面记录,要手动创建镜头(或焦点),您首先需要一个 getter 函数,这是微不足道的:
.a

然后是一个map函数,可以将一个函数应用到 a给定 test :
\f test = { test | a = f test.a }

现在您可以将这两者结合起来形成焦点:
a =
Focus.create
.a
(\f test = { test | a = f test.a })

b 执行相同操作:
b =
Focus.create
.b
(\f a = { a | b = f a.b })

现在您可以将这两个焦点与 (a => b) 结合起来这让您可以制作 Focus.update调用如上图。所以有一些样板文件,但这并不是什么大困难,您可以对自己的内容进行嵌套的获取/设置/更新。

更大的限制是,你不能做棱镜。所以如果有 Maybe参与你的道路,你被阻止了。回到以长长长的方式进行嵌套更新。

为什么没有棱镜?因为他们需要更高级的类型,而 Elm 没有。 (然而?)

所以答案是肯定的和否定的。您可以拥有类似 Lens 的东西,但不要指望拥有 Haskell 镜头的全部功能。

更新:看起来我最后一点错了 - Monacle提供棱镜。我不认为这是可能的。我站纠正!

关于elm - 榆树有像镜头一样的haskell或类似的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com