如何只修改一个元组的一个元素而不完全重写它?

时间:2019-05-13 18:16:34

标签: haskell tuples variable-assignment

How to modify just one field of a record without rewriting it completely?

在这里,我学到了一种有用的Haskell语法,可以在不完全重写记录的情况下修改记录的元素:

oldrecord { somefield = newvalue }

元组是否有可能类似的东西?

type ABigTuple = (Int, Int, Double, Int, String)

aBigTuple :: ABigTuple
aBigTuple = (5, 6, 3.2, 10, "asdf") 

anotherBigTuple = -- replace the 3rd elt of the prev tuple with 5.5 i/o 3.2

这是否有可能类似于记录,还是我必须重写整个元组?

1 个答案:

答案 0 :(得分:11)

我认为“重写整个元组”的意思是,

(\(a,b,_,d,e) -> (a,b,3.2,d,e))

lenses个元组,链接中有很多示例。

_3 .~ (3.2 :: Double)