How can I generalize non-trivial record updates? Here is simple example that explicitly updates item references to their new owner.
data Owner = Owner {
items :: [Item]
} deriving (Show)
data Item = Item {
name :: String,
owner :: Owner
}
instance Show Item where
show (Item name _) = name
item1 = Item "a" owner1
item2 = Item "b" owner1
item3 = Item "c" owner1
owner1 = Owner [item1,item2,item3,Item "d" owner1]
owner2 = Owner $ map (\(Item n o) -> Item n owner2) $ items owner1