何層かある data の深いところの値を更新したいんだけど、
どうするのがエレガントだと思う?

data A = A {a1 :: B, a2 :: C}
data B = B {b1 :: D, b2 :: E}
data C = C {c1 :: D, c2 :: F}
data D = D {d1 :: Int}
data E = E {e1 :: String}
data F = F {f1 :: D}

例えば x = A (B ( D 1) (E "x")) (C (D 2) (F (D 3)))

g :: A -> Int -> A
g a = 「a の ...C (D n) ... のところの n を *10 しただけのA型の値を返す」

例えば g x は A (B ( D 1) (E "x")) (C (D 20) (F (D 3))) だ。