Skip to content

Commit 8305d86

Browse files
Merge pull request #105 from chrisdone/cd/2025-10-10-add-more-stats
Add more stats about infer pipeline
2 parents d465bb0 + 0ec6327 commit 8305d86

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

src/Hell.hs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ data Command
131131
| Check FilePath StatsEnabled
132132
| Version
133133

134-
data StatsEnabled = NoStats | PrintStats
134+
data StatsEnabled = NoStats | PrintStats Int
135135

136136
-- | Main entry point.
137137
main :: IO ()
@@ -157,7 +157,7 @@ commandParser =
157157
Options.asum
158158
[ Run <$> Options.strArgument (Options.metavar "FILE" <> Options.help "Run the given .hell file"),
159159
Check <$> Options.strOption (Options.long "check" <> Options.metavar "FILE" <> Options.help "Typecheck the given .hell file") <*>
160-
Options.flag NoStats PrintStats (Options.long "compiler-stats" <> Options.internal),
160+
Options.flag NoStats (PrintStats 0) (Options.long "compiler-stats" <> Options.internal),
161161
Version <$ Options.flag () () (Options.long "version" <> Options.help "Print the version")
162162
]
163163

@@ -200,8 +200,9 @@ compileFile stats filePath = do
200200
emitStat stats "desugar" (t3-t2)
201201
case lookup "main" dterms of
202202
Nothing -> error "No main declaration!"
203-
Just main' ->
204-
case inferExp mempty main' of
203+
Just main' -> do
204+
inferred <- inferExp (nestStat stats) mempty main'
205+
case inferred of
205206
Left err -> error $ prettyString err
206207
Right uterm -> do
207208
t4 <- getTime
@@ -221,8 +222,12 @@ compileFile stats filePath = do
221222

222223
emitStat :: StatsEnabled -> Text -> Double -> IO ()
223224
emitStat NoStats _ _ = pure ()
224-
emitStat PrintStats label s =
225-
t_putStrLn $ "stat: " <> label <> " = " <> Text.pack (secs s)
225+
emitStat (PrintStats n0) label s =
226+
t_putStrLn $ Text.replicate (n0*2) " " <> "stat: " <> label <> " = " <> Text.pack (secs s)
227+
228+
nestStat :: StatsEnabled -> StatsEnabled
229+
nestStat NoStats = NoStats
230+
nestStat (PrintStats n) = PrintStats (n+1)
226231

227232
--------------------------------------------------------------------------------
228233
-- Get declarations from the module
@@ -1372,19 +1377,28 @@ data InferError
13721377
-- all eliminated. By the type system, the output contains only
13731378
-- determinate types.
13741379
inferExp ::
1380+
StatsEnabled ->
13751381
Map String (UTerm SomeTypeRep) ->
13761382
UTerm () ->
1377-
Either InferError (UTerm SomeTypeRep)
1378-
inferExp _ uterm =
1383+
IO (Either InferError (UTerm SomeTypeRep))
1384+
inferExp stats _ uterm = do
1385+
t0 <- getTime
13791386
case elaborate uterm of
1380-
Left elabError -> Left $ ElabError elabError
1381-
Right (iterm, equalities) ->
1387+
Left elabError -> pure $ Left $ ElabError elabError
1388+
Right (iterm, equalities) -> do
1389+
t1 <- getTime
1390+
emitStat stats "elaborate" (t1-t0)
13821391
case unify equalities of
1383-
Left unifyError -> Left $ UnifyError unifyError
1384-
Right subs ->
1392+
Left unifyError -> pure $ Left $ UnifyError unifyError
1393+
Right subs -> do
1394+
t2 <- getTime
1395+
emitStat stats "unify" (t2-t1)
13851396
case traverse (zonkToStarType subs) iterm of
1386-
Left zonkError -> Left $ ZonkError $ zonkError
1387-
Right sterm -> pure sterm
1397+
Left zonkError -> pure $ Left $ ZonkError $ zonkError
1398+
Right !sterm -> do
1399+
t3 <- getTime
1400+
emitStat stats "zonk" (t3-t2)
1401+
pure $ Right sterm
13881402

13891403
-- | Zonk a type and then convert it to a type: t :: *
13901404
zonkToStarType :: Map IMetaVar (IRep IMetaVar) -> IRep IMetaVar -> Either ZonkError SomeTypeRep

0 commit comments

Comments
 (0)