GHCi сообщает "lexical error...
"
потому что у вас нет шаблона Haskell
активирован в вашей сессии GHCi.
Вы можете активировать его либо
передав -XTemplateHaskell
в командной строке
или из самого GHCi:
ghci> :set -XTemplateHaskell
После исправления вы получите сообщение об ошибке:
No instance for (Show DecsQ) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
Теперь,
у вас есть несколько вариантов
распечатать вещи, которые находятся внутри Q
монады:
Использование -ddump-splices
(как уже указывалось в ответе Дениз Доган )
Довольно распечатать сгенерированный код Haskell из самого GHCi:
> putStrLn $(stringE . pprint =<< derive makeFoldable ''JStatement)
instance Foldable (JStatement ...)
where foldr ... = ...
Показать фактическую структуру на основе конструкторов:
> putStrLn $(stringE . show =<< derive makeFoldable ''JStatement)
[InstanceD [] (AppT (ConT Foldable) (... JStatement ...)) [...]]
Последние два можно упростить с помощью runQ
,
но это не работает для генерации кода, который
использует некоторые функции Template Haskell,
такие как reify
операции.
Это включает в себя некоторые (или, может быть, большинство?) Производные пакета производных.