Я хотел бы отслеживать «текущее» значение в последовательности неизменяемых значений. Каков наилучший способ сделать это в Haskell без введения новой ссылки для каждого нового значения? Вот пример:Переменные ссылки на неизменные данные в Haskell
data Person = Person {name, level, topic :: String }
deriving(Show)
dierk :: Person
dierk = Person "Dierk" "confident" "Java"
works :: Person -> String
works person = name person ++ " is " ++ level person ++ " in " ++ topic person
main _ = do
putStrLn $ works dierk
-- do more with "current" topic
putStrLn $ works dierk {level= "proficient", topic="Groovy"}
-- do more with "current" topic
putStrLn $ works dierk {level= "dabbling", topic="Haskell"}
-- do more with "current" topic
От этого зависит. Мутабельность может быть получена через монаду «Государственная личность». Если вам также нужно сделать IO поверх этого, тогда вам, вероятно, понадобится «StateT Person IO». – chi
Государственная монада не сокращает ее, так как вы только получаете правопреемство государства (новые состояния с каждым изменением), но не ссылаются на «текущее» состояние. – Dierk
Мне очень непонятно, что вы пытаетесь выразить в этом фрагменте псевдокода. – dfeuer