2013-05-22 16 views
17

Czy można w jakiś sposób wykonać reify w GHCi?Szablon Haskell: reify w GHCi

Kiedy próbuję użyć "runQ", narzeka "nie może dokonać rektyfikacji w Monadzie IO".

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

ja nie szukam :t czy coś, tylko w taki sposób, aby szybko sprawdzić, co reify powraca bez pisania do pliku i załadunku że plik do GHCi.

Odpowiedz

20

Po prostu trzeba uruchomić go ze splotu zamiast korzystania runQ:

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

Można użyć 'putStrLn $ (. StringE pprint = << zreifikować '' Bool)' dostać całkiem-wydruki. –

+1

Czy rzeczywiście można wyodrębnić wartość do zmiennej, zamiast po prostu przekształcić ją w ciąg znaków? – Hjulle