packages feed

peggy-0.3.2: bootstrap/Bootstrap.hs

{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleContexts #-}

import Data.Char
import Numeric
import Language.Haskell.TH
import Language.Haskell.Meta.Utils

import qualified Stage2

import Text.Peggy.Prim
import Text.Peggy.Quote
import Text.Peggy.CodeGen.TH
import Text.Peggy.Syntax
import Text.Peggy.SrcLoc

header :: String
header =
  unlines
  [ "{-# LANGUAGE RankNTypes, FlexibleContexts #-}"
  , ""
  , "module Text.Peggy.Parser (syntax) where"
  , "import Control.Applicative"
  , "import Data.ListLike.Base hiding (head)"
  , "import Data.HashTable.ST.Basic"
  , "import Numeric"
  , "import Data.Char"
  , "import Text.Peggy.Prim"
  , "import Text.Peggy.Syntax"
  ]

main :: IO ()
main = do
  res <- parseFile Stage2.syntax "./peggy.peggy"
  case res of
    Left err -> error $ show err
    Right defs -> do
      code <- runQ $ genDecs defs
      putStrLn header
      putStrLn $ pp code