Hi there.
recently I was trying to represent complex data by defining several datatypes and nesting them, such as
data Foo = Foo { foo :: Bar }
deriving (Eq,Show)
data Bar = Bar { bar :: Int }
deriving (Eq,Show)
To change only a part of the data, syntactic sugar is quite convenient. But it seems to be quite painful with nested datatypes.
b = Bar 10
f = Foo b
foobar :: Int -> Foo -> Foo
foobar i f =
let nb = (foo f){bar = i}
in f{foo = nb}
So, my question is : is there a nifty way to modify data within a nested datatype, similar to the f{foo = bar} style ? If not, anyone is using some kind of workaround for this ?