2013-05-22 90 views
17

GHCi中是否有某种可能做reify模板Haskell:在GHCi中实现

当我尝试使用'runQ'时,它抱怨说“不能在IO monad中进行reify”。

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

我不是在寻找:t什么的,只是换一种方式来快速检查什么reify的回报,而不将其写入到文件,并加载该文件到GHCI。

回答

20

你只要从拼接而不是使用runQ运行:

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

你可以用'$ putStrLn(stringE pprint = <<物化 '' 布尔)'得到适合打印输出。 –

+1

实际上是否可以将值提取到变量中,而不是将其转换为字符串? – Hjulle