packages feed

zeroth-2009.6.23: Language/Haskell/TH/ZeroTH/Helper.hs

module Language.Haskell.TH.ZeroTH.Helper ( helper, idPrefix ) where

import Control.Applicative        ( (<$>) )
import Data.Generics.Schemes      ( listify )
import Data.Maybe                 ( fromJust, isJust )
import Language.Haskell.TH.Ppr    ( pprint )
import Language.Haskell.TH.Syntax ( Dec, nameModule, Q, runIO )
import System.IO                  ( hFlush, stdout )

import Language.Haskell.TH.ZeroTH.Comments ( Location )

idPrefix :: String
idPrefix = "ZEROTH OUTPUT: "

helper :: Q [Dec] -> Location -> Q [Dec]
helper splice loc = do
    decls <- splice
    runIO $ do putStrLn $ idPrefix ++ show ((loc, unlines $ pprint <$> decls), map (fromJust . nameModule) $ listify (isJust . nameModule) decls)
               hFlush stdout
    return decls