{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
module Imports (module Imports) where

import           Prelude as Imports
import           Data.Monoid as Imports
import           Data.Maybe as Imports
import           Control.Monad as Imports hiding (forM_)
import           Control.Exception as Imports
import           Data.Foldable as Imports (forM_)
import           Control.Arrow as Imports

import           Data.Char
import           System.Exit
import           System.Process

import           Data.Functor as Imports ((<&>))

pass :: Monad m => m ()
pass :: forall (m :: * -> *). Monad m => m ()
pass = () -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

equals :: Eq a => a -> a -> Bool
equals :: forall a. Eq a => a -> a -> Bool
equals = a -> a -> Bool
forall a. Eq a => a -> a -> Bool
(==)

strip :: String -> String
strip :: String -> String
strip = String -> String
forall a. [a] -> [a]
reverse (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
isSpace (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
forall a. [a] -> [a]
reverse (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
isSpace

call :: FilePath -> [FilePath] -> IO ()
call :: String -> [String] -> IO ()
call String
name [String]
args = String -> [String] -> IO ExitCode
rawSystem String
name [String]
args IO ExitCode -> (ExitCode -> IO ()) -> IO ()
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \ case
  ExitCode
ExitSuccess -> IO ()
forall (m :: * -> *). Monad m => m ()
pass
  ExitCode
err -> ExitCode -> IO ()
forall a. ExitCode -> IO a
exitWith ExitCode
err

exec :: FilePath -> [FilePath] -> IO ()
exec :: String -> [String] -> IO ()
exec String
name [String]
args = String -> [String] -> IO ExitCode
rawSystem String
name [String]
args IO ExitCode -> (ExitCode -> IO ()) -> IO ()
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ExitCode -> IO ()
forall a. ExitCode -> IO a
exitWith