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