{-# 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