This article sounds a lot like the way that records are implemented for Scala (in Shapeless), which is a language that meets all your other criteria :P.
(Not that there aren't good reasons to use Haskell instead of Scala, but Scala has everything on your list)
(Not that there aren't good reasons to use Haskell instead of Scala, but Scala has everything on your list)