{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE FlexibleContexts #-}
module Axel.GHC where
import Axel.Error (Error(MacroError))
import Control.Monad.Except (MonadError, throwError)
import Control.Monad.IO.Class (MonadIO, liftIO)
import System.Exit (ExitCode(ExitFailure, ExitSuccess))
import System.Process (readProcessWithExitCode)
buildWithGHC :: (MonadIO m) => FilePath -> m (Either String String)
buildWithGHC filePath = do
(exitCode, stdout, stderr) <-
liftIO $
readProcessWithExitCode
"stack"
["--resolver", "lts-12.0", "ghc", "--", "-v0", "-ddump-json", filePath]
""
pure $
case exitCode of
ExitSuccess -> Right stdout
ExitFailure _ -> Left stderr
runWithGHC :: (MonadError Error m, MonadIO m) => FilePath -> m String
runWithGHC filePath = do
(exitCode, stdout, stderr) <-
liftIO $ readProcessWithExitCode "stack" ["runghc", filePath] ""
case exitCode of
ExitSuccess -> pure stdout
ExitFailure _ -> throwError $ MacroError stderr