{-# LANGUAGE LambdaCase #-} module Language.EFLINT.Util where import Control.Monad (forM) import System.FilePath import System.Directory find_included_file :: [FilePath] -> FilePath -> IO [FilePath] find_included_file :: [FilePath] -> FilePath -> IO [FilePath] find_included_file [FilePath] dirs FilePath path = do forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) forM [FilePath] dirs (\FilePath dir -> do let file :: FilePath file = FilePath dir FilePath -> FilePath -> FilePath </> FilePath path FilePath -> IO Bool doesFileExist FilePath file forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \case Bool True -> forall (m :: * -> *) a. Monad m => a -> m a return [FilePath file] Bool False -> (FilePath -> IO Bool doesFileExist (FilePath file forall a. [a] -> [a] -> [a] ++ FilePath ".eflint") forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \case Bool True -> forall (m :: * -> *) a. Monad m => a -> m a return [FilePath file forall a. [a] -> [a] -> [a] ++ FilePath ".eflint"] Bool False -> forall (m :: * -> *) a. Monad m => a -> m a return []))