axel-0.0.5: src/Axel/Haskell/GHC.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE UndecidableInstances #-}
module Axel.Haskell.GHC where
import Axel.Haskell.Stack (axelStackageId, stackageResolverWithAxel)
import Axel.Monad.Process (MonadProcess(runProcess))
import Control.Monad.Except (MonadError, throwError)
import System.Exit (ExitCode(ExitFailure, ExitSuccess))
ghcCompile :: (MonadError String m, MonadProcess m) => FilePath -> m String
ghcCompile filePath = do
(exitCode, stdout, stderr) <-
runProcess
"stack"
[ "--resolver"
, stackageResolverWithAxel
, "ghc"
, "--"
, "-v0"
, "-ddump-json"
, filePath
]
""
case exitCode of
ExitSuccess -> pure stdout
ExitFailure _ -> throwError stderr
ghcInterpret :: (MonadError String m, MonadProcess m) => FilePath -> m String
ghcInterpret filePath = do
(exitCode, stdout, stderr) <-
runProcess
"stack"
[ "--resolver"
, stackageResolverWithAxel
, "runghc"
, "--package"
, axelStackageId
, "--"
, filePath
]
""
case exitCode of
ExitSuccess -> pure stdout
ExitFailure _ -> throwError stderr