Функция для возврата записи Haskell с измененным полем
Учитывая
data MyRecord a = MyRecord{list :: [a], other_fields :: Char, …}
Я пытаюсь написать функцию, которая помещает новый a
в список и возвращает новый MyRecord
:
pushOntoList :: a -> MyRecord -> MyRecord
Вопрос
Есть ли способ написать pushOntoList
таким образом, чтобы он не зависел от того, что находится в остальной части записи, но просто возвращает его без изменений?
Еще один способ задать вопрос: можете ли вы написать pushOntoList
, не видя остальную часть определения MyRecord
?
Ответы
Ответ 1
Да, очень легко использовать синтаксис accessor/label записи:
b = a { list = 'x' : list a }
как в функции:
pushOntoList c a = a { list = c : list a }
например.
data MyRecord a = MyRecord {list :: [a], other_fields :: Char}
deriving Show
main = do
let a = MyRecord [] 'x'
b = a { list = 'x' : list a }
return (a,b)