Я передаю запись со следующей структурой функции Template Haskell:
module Editor.App where
data WithMaybe
data WithoutMaybe
type family TypeSelector a b where
TypeSelector WithMaybe b = Maybe b
TypeSelector WithoutMaybe b = b
data MyRecord a = MyRecord
{ field1 :: TypeSelector a Int
, field2 :: TypeSelector a String
}
$(myTHFunction ''MyRecord)
Внутри myTHFunction
Я звоню reify
, и она правильно дает мне следующий тип- Info
:
TyConI
(DataD
[]
Editor.App.MyRecord
[KindedTV a_6989586621679348600 StarT]
Nothing
[RecC Editor.App.MyRecord
[ ( Editor.App.field1
, Bang NoSourceUnpackedness NoSourceStrictness
, AppT (AppT (ConT Editor.App.TypeSelector) (VarT a_6989586621679348600))
(ConT GHC.Types.Int) )
, ( Editor.App.field2
, Bang NoSourceUnpackedness NoSourceStrictness
, AppT (AppT (ConT Editor.App.TypeSelector) (VarT a_6989586621679348600))
(ConT GHC.Base.String) )
]
]
[]
)
Однако в моей логике приложения я не могу перейти к непримененному KindedTV a_6989586621679348600 StarT
.Итак, мой вопрос:
- как мне "применить" эту переменную типа в TH
- или как мне применить ее до передачи ееTH.Я пытался
$(myTHFunction ''(MyRecord SomeSelector))
, но это не работает.