{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_HADDOCK -show-extensions #-}
module EndOfExe where
import GHC.Base
import GHC.List
import qualified System.Directory as D (findExecutable)
import Data.Maybe (isJust,isNothing)
import System.IO.Unsafe (unsafePerformIO)
endOfExecutable :: String -> IO (Maybe String)
endOfExecutable :: String -> IO (Maybe String)
endOfExecutable String
ys = do
Maybe String
xs <- String -> IO (Maybe String)
D.findExecutable String
ys
if forall a. Maybe a -> Bool
isJust Maybe String
xs
then forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String
ys forall a. [a] -> [a] -> [a]
++) (forall a. a -> Maybe a
Just String
"")
else do
Maybe String
zs <- String -> IO (Maybe String)
D.findExecutable (String
ys forall a. [a] -> [a] -> [a]
++ String
".exe")
if forall a. Maybe a -> Bool
isJust Maybe String
zs
then forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String
ys forall a. [a] -> [a] -> [a]
++) (forall a. a -> Maybe a
Just String
".exe")
else forall a. HasCallStack => String -> a
error (String
"EndOfExe.endOfExecutable: Please, install the executable " forall a. [a] -> [a] -> [a]
++ String
ys forall a. [a] -> [a] -> [a]
++ String
" into the directory in the PATH variable!")
showE :: String -> Maybe String
showE :: String -> Maybe String
showE String
xs
| forall a. [a] -> Bool
null String
xs = forall a. HasCallStack => String -> a
error String
"EndOfExe.showE: No executable specified!"
| Bool
otherwise = forall a. IO a -> a
unsafePerformIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO (Maybe String)
endOfExecutable forall a b. (a -> b) -> a -> b
$ String
xs
findSysExes :: [String] -> Maybe String
findSysExes :: [String] -> Maybe String
findSysExes [String]
xss
| forall a. (a -> Bool) -> [a] -> Bool
all (forall a. Maybe a -> Bool
isNothing forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe String
showE) [String]
xss = forall a. Maybe a
Nothing
| Bool
otherwise = forall a. a -> Maybe a
Just (forall a. [a] -> a
head forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
dropWhile (forall a. Maybe a -> Bool
isNothing forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe String
showE) forall a b. (a -> b) -> a -> b
$ [String]
xss)