2013-05-22 93 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