@@ -16,11 +16,13 @@
16module Main where
16module Main where
18import Control.Applicative
18import Control.Applicative
19−import Control.Monad.Writer
20import Control.Arrow (first, second)
19import Control.Arrow (first, second)
21import Control.Category ((>>>))
20import Control.Category ((>>>))
21+import Control.Monad.Writer
22+import Data.Function (on)
22import Data.List
23import Data.List
23import Data.Maybe (fromMaybe)
24import Data.Maybe (fromMaybe)
25+import Data.Tuple (swap)
24import Data.Version (showVersion)
26import Data.Version (showVersion)
26import Options.Applicative
28import Options.Applicative
@@ -75,7 +77,7 @@ docgen (PSCDocsOptions fmt input output) =
75 Left (D.DesugarError err) -> do
77 Left (D.DesugarError err) -> do
76 hPutStrLn stderr $ P.prettyPrintMultipleErrors False err
78 hPutStrLn stderr $ P.prettyPrintMultipleErrors False err
77 exitFailure
79 exitFailure
78− Right ms' -> do
80+ Right ms' ->
79 case output of
81 case output of
80 EverythingToStdOut ->
82 EverythingToStdOut ->
81 putStrLn (D.renderModulesAsMarkdown ms')
83 putStrLn (D.renderModulesAsMarkdown ms')
@@ -86,9 +88,11 @@ docgen (PSCDocsOptions fmt input output) =
86 ToFiles names -> do
88 ToFiles names -> do
87 let (ms, missing) = takeModulesByName' ms' names
89 let (ms, missing) = takeModulesByName' ms' names
88 guardMissing missing
90 guardMissing missing
91+ let ms'' = groupBy ((==) `on` fst) . sortBy (compare `on` fst) $ map swap ms
89− forM_ ms $ \(m, fp) -> do
92+ forM_ ms'' $ \grp -> do
93+ let fp = fst (head grp)
90 createDirectoryIfMissing True (takeDirectory fp)
94 createDirectoryIfMissing True (takeDirectory fp)
91− writeFile fp (D.renderModulesAsMarkdown [m])
95+ writeFile fp (D.renderModulesAsMarkdown $ snd `map` grp)
94 guardMissing [] = return ()
98 guardMissing [] = return ()