假设我有以下记录ADT:
data Foo = Bar { a :: Integer, b :: String, c :: String }
我想要一个记录并返回记录(相同类型)的函数,其中除了一个字段之外的所有字段都与作为参数传递的字段具有相同的值,如下所示:
walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }
上面的工作,但对于具有更多字段的记录(例如 10
),创建这样的函数将需要大量的打字,我觉得这是非常不必要的 .
是否有任何不那么繁琐的方法来做同样的事情?
3 回答
您无需定义辅助功能或使用镜头 . 标准Haskell已经满足您的需求 . 让我们以Don Stewart为例:
然后你可以说
test { c = "Goodbye" }
来获得更新的记录 .是的,这是一种更新记录字段的好方法 . 在GHCi你可以做 -
对于lenses来说这是一个很好的工作:
然后:
会将'test'的字段'c'更新为您的字符串 .