) ⇒ base → Maybe mod → IO [Either T.Text [Entry]]
getLocalisations gamePath modPath = do
  (baseFiles,modFiles) ← getFiles gamePath modPath "localisation"
  contents ← liftA2 (<>) (zip (map fileName baseFiles) <$> decodeFiles gamePath baseFiles)
             (zip (map fileName modFiles) <$> decodeFiles (fromJust modPath) modFiles)
  return $ map (uncurry localisationFile) contents
  where decodeFiles :: FileCollection fc ⇒ fc → [AssocFile fc] → IO [T.Text]
        -- The dummy fc parameter is needed to typecheck correctly
        decodeFiles _ = mapM (\f → decodeLatin1 <$> BS.toStrict <$> readFile f)

getDirectoryFiles :: FileCollection d ⇒ d → FilePath → IO [FilePath]
getDire
getLocalisations :: (FileCollection base, FileCollection mod) ⇒ base → Maybe mod → IO [Either T.Text [Entry]]
getLocalisations gamePath modPath = do
  (baseFiles,modFiles) ← getFiles gamePath modPath "localisation"
  contents ← liftA2 (<>) (zip (map fileName baseFiles) <$> decodeFiles gamePath baseFiles)
             (zip (map fileName modFiles) <$> decodeFiles (fromJust modPath) modFiles)
  return $ map (uncurry localisationFile) contents
  where decodeFiles :: FileCollection fc ⇒ fc → [AssocFile fc] → IO [T.Text]
        -- The dummy fc parameter is needed to typecheck correctly
        decodeFiles _ = mapM (\f → decodeLatin1 <$> BS.toStrict <$> readFile f)
getLocalisations gamePath modPath = do
  (baseFiles,modFiles) ← getFiles gamePath modPath "localisation"
  contents ← liftA2 (<>) (zip (map fileName baseFiles) <$> decodeFiles gamePath baseFiles)
             (zip (map fileName modFiles) <$> decodeFiles (fromJust modPath) modFiles)
  return $ map (uncurry localisationFile) contents
  where decodeFiles :: FileCollection fc ⇒ fc → [AssocFile fc] → IO [T.Text]
        -- The dummy fc parameter is needed to typecheck correctly
        decodeFiles _ = mapM (\f → decodeLatin1 <$> BS.toStrict <$> readFile f)