Я пишу функцию deriveMyTypeClass ::Q [Dec]
, где, учитывая имя типа, я обхожу его конструкторы и создаю экземпляр класса типов, который я написал на основе структуры.
Мой класс типов выглядит следующим образом:
class MyTypeclass a where
type Foo a
f :: a -> a -> Foo a
g :: Foo a -> a -> a
В моей функции deriveMyTypeclass
какое объявление я должен передать InstanceD
, чтобы удовлетворить объявление семейства типов. Будет ли это TySynInstD
?
Сейчас у меня есть что-то вроде:
deriveMyTypeclass :: Name -> Q [Dec]
deriveMyTypeclass tyName = do
... blah blah blah reify tyName ...
return $ [
InstanceD Nothing []
(AppT (ConT ''MyTypeclass) (ConT tyName)
[ -- declarations go here
, TySynInstD $ ?????
, FunD 'f ...
, FunD 'g ...
]
]
Любая помощь приветствуется :)
PS Я использую версию template- haskell -2.14.0.0, но если для вашего решения требуется 2.15, я рассмотрю вопрос об обновлении.