I would just do: f' = if cond0 then f else id g' = if cond1 then g else id foo { bar = f' (bar foo) , wib = g' (wib foo) } I like seeing the record updated, rather than hiding it in a function. Regards, Keean.