123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- module Gidl.Backend.Haskell where
- import Gidl.Types
- import Gidl.Parse
- import Gidl.Interface
- import Gidl.Backend.Cabal
- import Gidl.Backend.Haskell.Types
- import Gidl.Backend.Haskell.Interface
- import Ivory.Artifact
- import Data.Maybe (catMaybes)
- import System.Exit (exitFailure, exitSuccess)
- haskellBackend :: TypeEnv -> InterfaceEnv -> String -> [String] -> [Artifact]
- haskellBackend te@(TypeEnv te') ie@(InterfaceEnv ie') pkgname namespace =
- cabalFileArtifact cf : (map (artifactPath "src") (tmods ++ imods))
- where
- tmods = [ typeModule (namespace ++ ["Types"]) tr
- | (tn, _t) <- te'
- , let tr = typeDescrToRepr tn te
- , isUserDefined tr
- ]
- imods = [ interfaceModule (namespace ++ ["Interface"]) ir
- | (iname, _i) <- ie'
- , let ir = interfaceDescrToRepr iname ie te
- ]
- cf = defaultCabalFile pkgname mods deps
- mods = [ filePathToPackage (artifactFileName m) | m <- (tmods ++ imods)]
- deps = [ "cereal", "QuickCheck" ]
- runHaskellBackend :: FilePath -> String -> [String] -> FilePath -> IO ()
- runHaskellBackend idlfile pkgname namespace outdir = do
- c <- readFile idlfile
- case parseDecls c of
- Left e -> print e >> exitFailure
- Right (te, ie) -> do
- let as = haskellBackend te ie pkgname namespace
- es <- mapM (putArtifact outdir) as
- case catMaybes es of
- [] -> exitSuccess
- ees -> putStrLn (unlines ees) >> exitFailure
|