我对一些复杂的TemplateHaskell非常感兴趣,正在拼命寻找一个具有以下类型签名的函数:
Language.Haskell.TH.Type -> Data.Proxy.Proxy a
像这样的东西存在吗?我很感激很难确定类型 a 在上面给出的sig类型中,但编译器是否无法查看其中的内容 Type 弄清楚 一 应该是?
a
Type
一
下面是我试图解决的总体问题的更多上下文:我已经通过TH“去结构化”了一个记录类型,其值为 [Type] ,其中列表中的每个元素对应于记录中的一个字段。我需要将这些类型中的每一个传递给只占用一个函数的现有函数。 Proxy a . 如果这样做更容易,那么原始记录已经有一个 Generic
[Type]
Proxy a
Generic
你想要一个函数,给定一个类型,产生 表情 为了一个 Proxy 对于那种类型。
Proxy
proxyFor :: Type -> Exp proxyFor = SigE (ConE 'Proxy) . AppT (ConT ''Proxy)
例如
ghci> let x = $(return $ proxyFor (ConT ''Int)) in x Proxy
你可以 map proxyFor 超过你的 [Type] ,获取 [Exp] ,并将它们应用到您的函数中。
map
proxyFor
[Exp]