( kmARC | 2015. 06. 04., cs – 16:24 )


data Name    = Name String String
data Address = Address { city :: String, street  :: String }
data Person  = Person  { name :: Name,   address :: Address }

p1 = Person (Name "John" "Doe") (Address "London" "Trafalgar square 2")
p2 = p1 { address = (address p1) { street = "Trafalgar square 3" } }

Vagy még egyszerűbben és szebben lencsékkel (p2 = p1.address.street~="Trafalgar square 3" azt hiszem, de nem értek hozzá). Amúgy nem konkrétan ez a példa hozta ki belőlem az undort, csak megint eszembe jutott, hogy ADT-t definiálni milyen szar Scalaban; Trait, meg case class / object, stb. stb. Itt is .copy, etc.