module Config.Read(readFilesConfig) where import Config.Type import Control.Monad import Control.Exception.Extra import Config.Yaml import Data.List.Extra import System.FilePath readFilesConfig :: [(FilePath, Maybe String)] -> IO [Setting] readFilesConfig :: [(FilePath, Maybe FilePath)] -> IO [Setting] readFilesConfig [(FilePath, Maybe FilePath)] files = do let ([(FilePath, Maybe FilePath)] yaml, [(FilePath, Maybe FilePath)] haskell) = forall a. (a -> Bool) -> [a] -> ([a], [a]) partition (\(FilePath x,Maybe FilePath _) -> FilePath -> FilePath lower (FilePath -> FilePath takeExtension FilePath x) forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool `elem` [FilePath ".yml",FilePath ".yaml"]) [(FilePath, Maybe FilePath)] files forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (forall (t :: * -> *) a. Foldable t => t a -> Bool null [(FilePath, Maybe FilePath)] haskell) forall a b. (a -> b) -> a -> b $ forall a. Partial => FilePath -> IO a errorIO forall a b. (a -> b) -> a -> b $ FilePath "HLint 2.3 and beyond cannot use Haskell configuration files.\n" forall a. [a] -> [a] -> [a] ++ FilePath "Tried to use: " forall a. [a] -> [a] -> [a] ++ forall a. Show a => a -> FilePath show [(FilePath, Maybe FilePath)] haskell forall a. [a] -> [a] -> [a] ++ FilePath "\n" forall a. [a] -> [a] -> [a] ++ FilePath "Convert it to .yaml file format, following the example at\n" forall a. [a] -> [a] -> [a] ++ FilePath " <https://github.com/ndmitchell/hlint/blob/master/data/hlint.yaml>" [ConfigYaml] yaml <- forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM (forall a b c. (a -> b -> c) -> (a, b) -> c uncurry FilePath -> Maybe FilePath -> IO ConfigYaml readFileConfigYaml) [(FilePath, Maybe FilePath)] yaml forall (f :: * -> *) a. Applicative f => a -> f a pure forall a b. (a -> b) -> a -> b $ [ConfigYaml] -> [Setting] settingsFromConfigYaml [ConfigYaml] yaml