我正在寻找与此类似的东西:
runQExpDynamically :: (GhcMonad m) => Q Exp -> m Dynamic
我正在寻找组合我的两个代码示例的方法;一种用于动态评估haskell 代码,另一种用于使用模板haskell 动态组合haskell。换句话说,在 GhcMonad 中运行 Q 表达式:表达式。
我会解决这个问题,我应该在这里记录。
一些想法
我目前发现可行的方法是将表达式序列化并将其输入到动态评估中。序列化必须以某种方式在 Q monad 内部完成。我也许可以使用 Exp 实现Ppr prettyprinter类。但是,我可能会以这种方式失去一些类型安全性?可能有更清洁(更卫生”?)的方式。我应该更多地研究 Data.Dynamic以了解动态值的工作原理。
编辑:我现在意识到 Dynamic 只代表值,而我想运行 Q Exp 'declarations'。我想将数据类型添加到动态上下文中。