peggy-0.1.0: Text/Peggy/Quote.hs
module Text.Peggy.Quote (
peggy,
peggy_f,
) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Text.Parsec
import Text.Parsec.Pos
import Text.Peggy.Parser
import Text.Peggy.CodeGen.TH
peggy :: QuasiQuoter
peggy = QuasiQuoter { quoteDec = quote, quoteExp = undefined, quotePat = undefined, quoteType = undefined }
peggy_f :: QuasiQuoter
peggy_f = quoteFile peggy
quote :: String -> Q [Dec]
quote txt = do
loc <- location
case parse (setPosition (initPos loc) >> syntax) (loc_filename loc) txt of
Left err -> error $ "peggy syntax-error: " ++ show err
Right defs -> genCode defs
where
initPos loc = newPos (loc_filename loc) (fst $ loc_start loc) (snd $ loc_start loc)