{-# OPTIONS_GHC -fplugin=RecordDotPreprocessor #-} data Foo = Foo {bar :: Int} mfoo = fmap (.bar) $ Nothing bar = (Foo 1).bar fooplus f n = f{foo = f.bar + n} fooplus' f n = f{foo = f.bar + n} fooplus'' f n = f{foo = f.bar + n} fooplus''' f n = f{foo = f.bar + n}