Template Haskell: 在GHCi中使用reify

27

在GHCi中,能否以某种方式执行reify操作?

当我尝试使用“runQ”时,它会报错“无法在IO模型下执行reify操作”。

>>> runQ (reify ''Bool)
Template Haskell error: Can't do `reify' in the IO monad
*** Exception: user error (Template Haskell failure)

我不是在寻找:t或类似的东西,只是想快速检查reify返回的内容,而无需将其写入文件并将该文件加载到GHCi中。

1个回答

31

您只需要从Splice中运行它,而不是使用runQ

> $(stringE . show =<< reify ''Bool)
"TyConI (DataD [] GHC.Types.Bool [] [NormalC GHC.Types.False [],NormalC GHC.Types.True []] [])"

6
您可以使用 putStrLn $(stringE . pprint =<< reify ''Bool) 来获得漂亮的输出。 - Frerich Raabe
5
能否将值真正提取到一个变量中,而不仅仅是将其转换为字符串? - Hjulle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接