Agreed with pretty much everything rhendric said. To add to that though: the definition of the ‘Field’ type family still seems more complicated than necessary. I tend to use HKD’s instead. Something along the lines of:
data Valid a
data Raw a
-- or just use Data.Functor.Identity and Data.Maybe directly
type family HKD f a where
HKD Valid a = a
HKD Raw a = Maybe a
data Test f = Test { field1 :: HKD f Address, field2 :: HKD f PhoneNumber }
rawInput :: Test Raw
rawInput = Test (Just myAddress) Nothing
validTest :: Test Valid
validTest = Test myAddress myPhoneNumber