Generic1 Foo
не может быть получено, потому что Generic1
предназначено для типов * -> *
, а не (* -> *) -> *
.В принципе, может быть поддержка (* -> *) -> *
с большим количеством конструкторов в GHC.Generics
, но этот подход просто плохо масштабируется (он имеет гораздо больше неинтуитивных синтаксических ограничений, и у вас всегда будет та же проблема для более сложных типов).
На самом деле вы можете многое сделать с простым Generic
, который перекрывается с изначально намеченными вариантами использования для Generic1
.В противном случае вам понадобится что-то более мощное, чем GHC.Generics
, например, недавно выпущенный kind-generics (содержит ссылки на статьи и хакерские ссылки).