我陷入了复杂的TemplateHaskell的深渊,并拼命寻找具有以下类型签名的函数:
items.stream().foreach(System.out::println);
是否存在类似的东西?我可以理解,很难在上面给出的类型签名中确定类型Language.Haskell.TH.Type -> Data.Proxy.Proxy a
,但是编译器无法查看a
内部的内容并找出{ {1}}应该是?
这里是我要解决的整体问题的更多上下文:我已经通过TH对记录类型进行“解构”,其值为Type
,其中列表中的每个元素对应于记录中的一个字段。我需要将这些类型中的每一个传递给仅使用a
的现有函数。如果使事情变得简单,则原始记录已经有一个[Type]
答案 0 :(得分:1)
您想要一个给定类型的函数,为该类型的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]
,并将其应用于您的函数。