@@ -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.
137137main :: 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
222223emitStat :: StatsEnabled -> Text -> Double -> IO ()
223224emitStat 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.
13741379inferExp ::
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 :: *
13901404zonkToStarType :: Map IMetaVar (IRep IMetaVar ) -> IRep IMetaVar -> Either ZonkError SomeTypeRep
0 commit comments