agda2hs-1.0: src/Main.hs
module Main where
import System.Console.GetOpt
import qualified Language.Haskell.Exts.Syntax as Hs
import qualified Language.Haskell.Exts.Build as Hs
import qualified Language.Haskell.Exts.Parser as Hs
import qualified Language.Haskell.Exts.Extension as Hs
import Agda.Main
import Agda.Compiler.Backend
import Agda2Hs.Compile
import Agda2Hs.Compile.Types
import Agda2Hs.Render
defaultOptions :: Options
defaultOptions = Options{ optOutDir = Nothing, optExtensions = [] }
outdirOpt :: Monad m => FilePath -> Options -> m Options
outdirOpt dir opts = return opts{ optOutDir = Just dir }
extensionOpt :: Monad m => String -> Options -> m Options
extensionOpt ext opts = return opts{ optExtensions = Hs.parseExtension ext : optExtensions opts }
backend :: Backend' Options Options ModuleEnv ModuleRes (CompiledDef, CompileOutput)
backend = Backend'
{ backendName = "agda2hs"
, backendVersion = Just "1.0"
, options = defaultOptions
, commandLineFlags =
[ Option ['o'] ["out-dir"] (ReqArg outdirOpt "DIR")
"Write Haskell code to DIR. (default: project root)"
, Option ['X'] [] (ReqArg extensionOpt "EXTENSION")
"Enable Haskell language EXTENSION. Affects parsing of Haskell code in FOREIGN blocks."
]
, isEnabled = \ _ -> True
, preCompile = return
, postCompile = \ _ _ _ -> return ()
, preModule = moduleSetup
, postModule = writeModule
, compileDef = compile
, scopeCheckingSuffices = False
, mayEraseType = \ _ -> return True
}
main = runAgda [Backend backend]