{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_HADDOCK -show-extensions #-}
module EndOfExe2 where
import GHC.Base
import GHC.List
import qualified System.Directory as D (findExecutable)
import Data.Maybe (isJust,isNothing,fromJust)
import System.IO.Unsafe (unsafePerformIO,unsafeDupablePerformIO)
maybeEndOfExecutable :: String -> IO (Maybe String)
maybeEndOfExecutable :: String -> IO (Maybe String)
maybeEndOfExecutable String
ys = do
Maybe String
xs <- String -> IO (Maybe String)
D.findExecutable String
ys
if Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
xs
then Maybe String -> IO (Maybe String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe String
xs
else do
Maybe String
zs <- String -> IO (Maybe String)
D.findExecutable (String
ys String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".exe")
if Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
zs
then Maybe String -> IO (Maybe String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe String
zs
else Maybe String -> IO (Maybe String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe String
forall a. Maybe a
Nothing
endOfExe :: String -> IO String
endOfExe :: String -> IO String
endOfExe String
ys = do
Maybe String
xs <- String -> IO (Maybe String)
D.findExecutable String
ys
if Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
xs
then String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> IO String)
-> (Maybe String -> String) -> Maybe String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe String -> IO String) -> Maybe String -> IO String
forall a b. (a -> b) -> a -> b
$ Maybe String
xs
else do
Maybe String
zs <- String -> IO (Maybe String)
D.findExecutable (String
ys String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".exe")
if Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
zs
then String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> IO String)
-> (Maybe String -> String) -> Maybe String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe String -> IO String) -> Maybe String -> IO String
forall a b. (a -> b) -> a -> b
$ Maybe String
zs
else String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return String
""
showE :: String -> Maybe String
showE :: String -> Maybe String
showE String
xs
| String -> Bool
forall a. [a] -> Bool
null String
xs = Maybe String
forall a. Maybe a
Nothing
| Bool
otherwise = IO (Maybe String) -> Maybe String
forall a. IO a -> a
unsafePerformIO (IO (Maybe String) -> Maybe String)
-> (String -> IO (Maybe String)) -> String -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO (Maybe String)
maybeEndOfExecutable (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String
xs
{-# INLINE showE #-}
showEDup :: String -> Maybe String
showEDup :: String -> Maybe String
showEDup String
xs
| String -> Bool
forall a. [a] -> Bool
null String
xs = Maybe String
forall a. Maybe a
Nothing
| Bool
otherwise = IO (Maybe String) -> Maybe String
forall a. IO a -> a
unsafeDupablePerformIO (IO (Maybe String) -> Maybe String)
-> (String -> IO (Maybe String)) -> String -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO (Maybe String)
maybeEndOfExecutable (String -> Maybe String) -> String -> Maybe String
forall a b. (a -> b) -> a -> b
$ String
xs
{-# INLINE showEDup #-}
showE0 :: String -> String
showE0 :: String -> String
showE0 String
xs
| String -> Bool
forall a. [a] -> Bool
null String
xs = String
""
| Bool
otherwise = IO String -> String
forall a. IO a -> a
unsafePerformIO (IO String -> String) -> (String -> IO String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
endOfExe (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
xs
{-# INLINE showE0 #-}
showE0Dup :: String -> String
showE0Dup :: String -> String
showE0Dup String
xs
| String -> Bool
forall a. [a] -> Bool
null String
xs = String
""
| Bool
otherwise = IO String -> String
forall a. IO a -> a
unsafeDupablePerformIO (IO String -> String) -> (String -> IO String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
endOfExe (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
xs
{-# INLINE showE0Dup #-}