Учитывая тип данных
data Foo =
Foo1 { foo1Name :: String}
| Foo2 { foo2Name :: String, foo2Age :: Integer }
, я хотел бы иметь возможность извлечь Data.Data.DataTypeS
из Foo1
и Foo2
s.
Я пробовал
datatype = (undefined :: Foo)
constrs = dataTypeConstrs datatype
foo1 = fromConstrs (head constrs) :: Foo
foo1Fields = gmapQ dataTypeOf foo1
, но foo1Fields
просто скажет, что foo1Name
- это Prelude. []
, а не используемый параметр типа.
Можно ли извлечь параметры типа с помощью SYB, или мне следует использовать другую библиотеку отражения?