@@ -46,7 +46,7 @@ index 2d78375003..f19ff5f108 100644
46
46
, srcDirs :: [String]
47
47
+ , srcDirsFrom :: Maybe String
48
48
, destDir :: String
49
-
49
+
50
50
, perModule :: Bool
51
51
@@ -36,9 +40,13 @@ default_flags :: Flags
52
52
default_flags = Flags
@@ -60,22 +60,22 @@ index 2d78375003..f19ff5f108 100644
60
60
, srcDirs = []
61
61
+ , srcDirsFrom = Nothing
62
62
, destDir = "."
63
-
63
+
64
64
, perModule = False
65
65
@@ -76,32 +84,69 @@ default_final_flags flags = flags
66
66
else srcDirs flags
67
67
}
68
-
68
+
69
69
- type FlagOptSeq = [OptDescr (Flags -> Flags)] -> [OptDescr (Flags -> Flags)]
70
70
+ type FlagOptSeq = [OptDescr (Flags -> IO Flags)] -> [OptDescr (Flags -> IO Flags)]
71
-
71
+
72
72
noArg :: String -> String -> (Flags -> Flags) -> FlagOptSeq
73
73
- noArg flag detail fn = (:) $ Option [] [flag] (NoArg $ fn) detail
74
74
+ noArg flag detail fn = noArgIO flag detail (pure . fn)
75
75
+
76
76
+ noArgIO :: String -> String -> (Flags -> IO Flags) -> FlagOptSeq
77
77
+ noArgIO flag detail fn = (:) $ Option [] [flag] (NoArg fn) detail
78
-
78
+
79
79
anArg :: String -> String -> String -> (String -> Flags -> Flags) -> FlagOptSeq
80
80
- anArg flag detail argtype fn = (:) $ Option [] [flag] (ReqArg fn argtype) detail
81
81
+ anArg flag detail argtype fn = anArgIO flag detail argtype (\s xs -> pure $ fn s xs)
@@ -88,11 +88,11 @@ index 2d78375003..f19ff5f108 100644
88
88
+
89
89
+ optArgIO :: String -> String -> String -> (String -> Flags -> IO Flags) -> FlagOptSeq
90
90
+ optArgIO flag detail argtype fn = (:) $ Option [] [flag] (OptArg (maybe pure fn) argtype) detail
91
-
91
+
92
92
infoArg :: String -> FlagOptSeq
93
93
- infoArg info = (:) $ Option [] [] (NoArg $ id) info
94
94
+ infoArg info = (:) $ Option [] [] (NoArg $ pure) info
95
-
95
+
96
96
- excludeOpt, includeOpt, hpcDirOpt, resetHpcDirsOpt, srcDirOpt,
97
97
- destDirOpt, outputOpt, verbosityOpt,
98
98
+ excludeOpt, excludesFromOpt, includeOpt, includesFromOpt, hpcDirOpt, hpcDirsFromOpt, resetHpcDirsOpt,
@@ -110,10 +110,10 @@ index 2d78375003..f19ff5f108 100644
110
110
+ , excludeModsFrom = Just a
111
111
+ }
112
112
+ )
113
-
113
+
114
114
includeOpt = anArg "include" "include MODULE and/or PACKAGE" "[PACKAGE:][MODULE]"
115
115
$ \ a f -> f { includeMods = a `Set.insert` includeMods f }
116
-
116
+
117
117
+ includesFromOpt = optArgIO "includes-from" "a file with a list of MODULE and/or PACKAGE names to include" "FILE"
118
118
+ (\ a f -> do
119
119
+ content <- readFile a
@@ -125,7 +125,7 @@ index 2d78375003..f19ff5f108 100644
125
125
hpcDirOpt = anArg "hpcdir" "append sub-directory that contains .mix files" "DIR"
126
126
(\ a f -> f { hpcDirs = hpcDirs f ++ [a] })
127
127
. infoArg "default .hpc [rarely used]"
128
-
128
+
129
129
+ hpcDirsFromOpt = optArgIO "hpcdirs-from" "read from a file and append sub-directories that contain .mix files" "FILE"
130
130
+ (\ a f -> do
131
131
+ content <- readFile a
@@ -141,7 +141,7 @@ index 2d78375003..f19ff5f108 100644
141
141
@@ -110,6 +155,16 @@ srcDirOpt = anArg "srcdir" "path to source directory of .hs files" "DI
142
142
(\ a f -> f { srcDirs = srcDirs f ++ [a] })
143
143
. infoArg "multi-use of srcdir possible"
144
-
144
+
145
145
+
146
146
+ srcDirsFromOpt = optArgIO "srcdirs-from" "read paths to source directories of .hs files from a file" "FILE"
147
147
+ (\ a f -> do
@@ -154,7 +154,7 @@ index 2d78375003..f19ff5f108 100644
154
154
+
155
155
destDirOpt = anArg "destdir" "path to write output to" "DIR"
156
156
$ \ a f -> f { destDir = a }
157
-
157
+
158
158
diff --git a/utils/hpc/HpcMarkup.hs b/utils/hpc/HpcMarkup.hs
159
159
index 1d5efcf6d6..7ed952aeaa 100644
160
160
--- a/utils/hpc/HpcMarkup.hs
@@ -229,7 +229,7 @@ index 3f1813f243..64f88341eb 100644
229
229
+++ b/utils/hpc/Main.hs
230
230
@@ -1,6 +1,7 @@
231
231
-- (c) 2007 Andy Gill
232
-
232
+
233
233
-- Main driver for Hpc
234
234
+ import Control.Monad
235
235
import Data.Version
@@ -245,5 +245,5 @@ index 3f1813f243..64f88341eb 100644
245
245
+ intermediate_flags <- foldr (<=<) pure o $ init_flags plugin
246
246
+ let flags = final_flags plugin intermediate_flags
247
247
implementation plugin flags ns
248
-
248
+
249
249
main :: IO ()
0 commit comments