The workaround is for a script to traverse the filesystem and generate a list of modules that can then be copied into the .cabal for haddock and Setup.hs for hpc.  If anyone else is trying to do the same, here&#39;s the code: <a href="http://hpaste.org/fastcgi/hpaste.fcgi/view?id=11224#a11224">http://hpaste.org/fastcgi/hpaste.fcgi/view?id=11224#a11224</a><br>

<br>script copied below:<br><br>import System.Directory(doesDirectoryExist, getDirectoryContents)<br>import Data.Tree(unfoldTreeM, flatten)<br>import Control.Monad(filterM)<br>import System.FilePath(splitDirectories, dropExtension, takeExtension)<br>

import Data.List(sort, intercalate)<br><br>main :: IO ()<br>main = do<br>      paths &lt;- modules<br>      putStrLn (cabal paths)<br>      putStrLn (hpc paths)<br><br>cabal :: [String] -&gt; String<br>cabal xs = header ++ intercalate sep xs<br>

  where<br>     header = &quot;  exposed-modules: &quot;<br>     sep = &quot;,\n  &quot;<br><br>hpc :: [String] -&gt; String<br>hpc = concatMap include<br>  where<br>     include x = pre ++ x ++ &quot;\&quot;&quot;<br>     pre = &quot;\n   , \&quot;--include=&quot;<br>

<br>modules :: IO [String]<br>modules = do<br>      paths &lt;- filePaths &quot;.&quot;<br>      return [modName p | p &lt;- paths, takeExtension p == &quot;.hs&quot;]<br>   where<br>      modName = intercalate &quot;.&quot; . splitDirectories . dropExtension<br>

<br>filePaths :: FilePath -&gt; IO [FilePath]<br>filePaths path = do <br>   tree &lt;- unfoldTreeM childPaths path<br>   filterM (fmap not . doesDirectoryExist) (flatten tree)<br><br>childPaths :: FilePath -&gt; IO (FilePath, [String])<br>

childPaths dir = do<br>   b &lt;- doesDirectoryExist dir<br>   fs &lt;- if b then getDirectoryContents dir else return []<br>   return (dir, [dir ++ &quot;/&quot; ++ p | p &lt;- fs, head p /= &#39;.&#39;])<br><br><br>-Greg<br>

<br><br>On Tue, Oct 27, 2009 at 2:33 PM, Greg Fitzgerald &lt;<a href="mailto:garious@gmail.com">garious@gmail.com</a>&gt; wrote:<br>&gt; I have a cabal package that defines a few dozen modules, and I&#39;m<br>&gt; hoping to generate documentation and code coverage for all modules<br>

&gt; without listing each module explicitly.<br>&gt;<br>&gt; currently my .cabal includes:<br>&gt;<br>&gt; library<br>&gt;  exposed-modules:<br>&gt;   Language.Idl.Data,<br>&gt;   Language.Idl.Merge,<br>&gt;   Language.Idl.Parser,<br>

&gt;   ...lots more...<br>&gt;<br>&gt;<br>&gt; my Setup.hs includes an explicit system call to hpc:<br>&gt;<br>&gt;     exec &quot;hpc&quot; [&quot;markup&quot;<br>&gt;                     , &quot;--include=Language.Idl.Data&quot;<br>

&gt;                     , &quot;--include=Language.Idl.Merge&quot;<br>&gt;                     , &quot;--include=Language.Idl.Parser&quot;<br>&gt;                     ...all the same files as above...<br>&gt;                     ]<br>

&gt;<br>&gt; Questions:<br>&gt; 1) Is there a way to create haddock docs for /all/ modules, instead of<br>&gt; just the ones listed by &#39;exposed-modules&#39;?<br>&gt; 2) Is there a way to query cabal for the list of modules?  Or by<br>

&gt; chance has hpc recently been integrated with cabal?<br>&gt;<br>&gt; Thanks,<br>&gt; Greg<br>&gt;<br><br>