{-# language DuplicateRecordFields #-} data A = A { x :: Int } data B = B { x :: Bool } updatexa :: Int -> A -> A updatexa y a = (a :: A) { x = y } updatexb :: Bool -> B -> B updatexb y b = (b :: B) { x = y } main :: IO () main = pure ()