module Fay.Compiler.Prelude
( module Prelude
, module Control.Applicative
, module Control.Arrow
, module Control.Monad
, module Data.Char
, module Data.Data
, module Data.Either
, module Data.Function
, module Data.List
, module Data.Maybe
, module Data.Monoid
, module Data.Ord
, module Safe
, anyM
, for
, io
, readAllFromProcess
) where
import Control.Applicative
import Control.Arrow (first, second, (&&&), (***), (+++), (|||))
import Control.Monad hiding (guard)
import Data.Char hiding (GeneralCategory (..))
import Data.Data (Data (..), Typeable)
import Data.Either
import Data.Function (on)
import Data.List hiding (delete)
import Data.Maybe
import Data.Monoid (Monoid (..), (<>))
import Data.Ord
import Prelude hiding (exp, mod)
import Safe
import Control.Monad.Error
import System.Exit
import System.Process
io :: MonadIO m => IO a -> m a
io = liftIO
anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool
anyM p l = return . not . null =<< filterM p l
for :: (Functor f) => f a -> (a -> b) -> f b
for = flip fmap
readAllFromProcess :: FilePath -> [String] -> String -> IO (Either (String,String) (String,String))
readAllFromProcess program flags input = do
(code,out,err) <- readProcessWithExitCode program flags input
return $ case code of
ExitFailure 127 -> Left ("cannot find executable " ++ program, "")
ExitFailure _ -> Left (err, out)
ExitSuccess -> Right (err, out)