autoexporter-0.2.0: library/Autoexporter.hs
module Autoexporter (main) where
import qualified Data.List as List
import qualified Data.Maybe as Maybe
import qualified Distribution.ModuleName as ModuleName
import qualified Distribution.Text as Text
import qualified System.Directory as Directory
import qualified System.Environment as Environment
import qualified System.FilePath as FilePath
main :: IO ()
main = do
args <- Environment.getArgs
case args of
[name, inputFile, outputFile] -> do
let moduleName = makeModuleName name
let directory = FilePath.dropExtension inputFile
files <- Directory.getDirectoryContents directory
let haskellFiles = filter (\ f -> List.isSuffixOf ".hs" f || List.isSuffixOf ".lhs" f) files
let paths = map (directory FilePath.</>) haskellFiles
let modules = List.sort (map makeModuleName paths)
let exports = init (unlines (map (\ x -> " module " ++ x ++ ",") modules))
let imports = init (unlines (map ("import " ++) modules))
let output = unlines
[ unwords ["module", moduleName, "("]
, exports
, ") where"
, ""
, imports
]
writeFile outputFile output
_ -> error ("unexpected arguments: " ++ show args)
makeModuleName :: FilePath -> String
makeModuleName name =
let path = FilePath.dropExtension name
parts = FilePath.splitDirectories path
rest = reverse (takeWhile (\ x -> Maybe.isJust (Text.simpleParse x :: Maybe ModuleName.ModuleName)) (reverse parts))
in List.intercalate "." rest