{-#OPTIONS_GHC -fno-warn-missing-fields#-}

module Text.Alex.Quote (
    parseAlex
  , compileAlex
  , alex
  ) where

import Text.Alex(runAlex, Target(..))
import Text.Alex.AlexTemplate

import Language.Haskell.TH.Quote
import Language.Haskell.TH

import Language.Haskell.Meta

type Alex = String

compileAlex :: Alex -> Q [Dec]
compileAlex = return . either error id . parseDecs

alex :: QuasiQuoter
alex = QuasiQuoter {quoteExp = litE . StringL . parseAlex}

parseAlex :: String -> Alex
parseAlex s = fst (runAlex [] Nothing s) ++ "\n" ++ alexTemplate HaskellTarget