packages feed

ghc-bench-0.1.0: src/Imports.hs

module Imports (module Imports) where

import Prelude as Imports hiding (show, lines, unlines, words, unwords, error, putStrLn)

import Data.Maybe as Imports

import Data.Functor as Imports (void, (<&>))
import Control.Arrow as Imports ((>>>))
import Control.Monad as Imports (when, unless)

import Data.Text as Imports (Text, show, lines, unlines, words, unwords, pack, unpack, strip)
import Data.Text.Encoding as Imports (encodeUtf8)

import System.Exit as Imports (ExitCode(..))
import System.FilePath as Imports ((</>))

import System.Exit (die)
import System.Directory (removePathForcibly)
import System.IO.Temp (createTempDirectory)
import Control.Exception (bracket)

withTempDirectory :: FilePath -> FilePath -> (FilePath -> IO a) -> IO a
withTempDirectory dir name = bracket (createTempDirectory dir name) removePathForcibly

error :: Text -> IO a
error message = die $ "ghc-bench: " <> unpack message

class Bind m r where
  bind :: (a -> r) -> m a -> r

instance Monad m => Bind m (m b) where
  bind :: (a -> m b) -> m a -> m b
  bind = (=<<)

instance Bind m r => Bind m (b -> r) where
  bind :: (a -> b -> r) -> m a -> b -> r
  bind f ma b = bind (flip f b) ma

infixl 1 -<

(-<) :: Bind m r => (a -> r) -> m a -> r
(-<) = bind

pass :: Applicative m => m ()
pass = pure ()