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.TH.Lift

import Language.Haskell.Meta

type Alex = String

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

alex :: QuasiQuoter
alex = QuasiQuoter (lift . parseAlex) (error "pattern quoting is not supported") 

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