data MyRecF f = MyRec { foo :: String -- many other fields here as well , bar :: f Int } type MyRecWithAFoo = MyRecF Identity data VoidF a type MyRecWithoutFoo = MyRecF VoidF -- Q1) So how is MyRecWithoutFoo actually represented by GHC? -- I guess ideally I would not want to represent the bar field -- at all. -- Q2) So how would I even go about creating a RecWithoutFoo? -- Q2b, ideally I would want to have some sort of function 'defaultRec' --that is usable for both RecWithAFoo and RecWithoutAFoo -- | some way of creating a defualtRec, which ideally I -- could use for both MyRecWithAFoo and MyRecWitoutFoo defaultRec :: ??? => MyRecF f defaultRec = myRec "foo" ???? -- Q3) Any alternative, ergonomic way of defining this? -- I guess I could use some data family; but that would -- involve duplicating the many fields I guess.