Use GHC generics