Как изменить только одно поле записи, не переписывая ее полностью?
Здесь я выучил полезный синтаксис 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
Возможно ли это аналогично записям или мне нужно переписать весь кортеж?
Я предполагаю, что под "переписыванием всего кортежа" вы подразумеваете что-то вроде
(\(a,b,_,d,e) -> (a,b,3.2,d,e))
Для кортежей есть линзы , ссылка имеет множество примеров.
_3 .~ (3.2 :: Double)