packages feed

H-0.7.0.0: H.hs

-- |
-- Copyright: (C) 2013 Amgen, Inc.
--

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TemplateHaskell #-}

module Main where

import Data.ByteString (hPut)
import Data.FileEmbed (embedFile)
import Data.Version ( showVersion )
import System.Console.CmdArgs
import System.Exit (exitWith)
import System.IO (hClose)
import System.IO.Temp (withSystemTempFile)
import System.Process

import qualified Paths_H

data H = H
  { configFiles :: [FilePath]
  , configInteractive  :: FilePath
  } deriving (Eq, Data, Typeable, Show)

cmdSpec :: H
cmdSpec = H
  { configFiles = def &= args  &= typ "-- [GHCi options]"
  , configInteractive  = "ghci" &= explicit &= name "interactive" &= help "Run interpreter" &= opt "ghci" &= typ "ghci" &= help "Set an alternative haskell interpreter."
  }
  &= program "H" &=
  help "H wrapper over ghci. " &=
  summary ("H version " ++ showVersion Paths_H.version ++
           "\nCopyright (C) 2013-2014 Amgen, Inc." ++
           "\nCopyright (C) 2015 Tweag I/O Limited.")
  -- TODO: add details clause

main :: IO ()
main = do
    config <- cmdArgs cmdSpec
    case config of
      H {configFiles, configInteractive} -> withSystemTempFile "H.ghci" $ \cfg h -> do
        hPut h $(embedFile "H.ghci") >> hClose h
        let argv = configFiles ++ ["-v0", "-ghci-script", cfg]
        (_,_,_,ph) <-
          createProcess (proc configInteractive argv)
            { std_in = Inherit
            , std_out = Inherit
            , delegate_ctlc = True
            }
        exitWith =<< waitForProcess ph