:seti -XDuplicateRecordFields -XDerivingStrategies data A = MkA { foo :: Int, bar :: Int } deriving stock Show data B = MkB { foo :: Int } f r = r { foo = 3, bar = 4 } f (MkA { foo = 2, bar = 3 })