@@ -22,8 +22,10 @@ This sorts variables into the young and old pools accordingly.
2222-}
2323generalize :: TS.Pool -> TS.Solver ()
2424generalize (TS.Pool youngRank youngInhabitants) =
25+ {-# SCC elm_compiler_type_generalize #-}
2526 do youngMark <- TS.uniqueMark
2627 let insert dict var =
28+ {-# SCC elm_compiler_type_insert #-}
2729 do descriptor <- UF.descriptor var
2830 UF.modifyDescriptor var (\desc -> desc { _mark = youngMark })
2931 return $ Map.insertWith (++) (_rank descriptor) [var] dict
@@ -50,20 +52,21 @@ generalize (TS.Pool youngRank youngInhabitants) =
5052 -- For variables with rank youngRank
5153 -- If rank < youngRank: register in oldPool
5254 -- otherwise generalize
53− let registerIfLowerRank var = do
54− isRedundant <- liftIO $ UF.redundant var
55− case isRedundant of
56− True -> return ()
57− False -> do
58− desc <- liftIO $ UF.descriptor var
59− case _rank desc < youngRank of
60− True ->
61− TS.register var >> return ()
62− False ->
63− liftIO $ UF.setDescriptor var $ desc
64− { _rank = noRank
65− , _content = rigidify (_content desc)
66− }
55+ let registerIfLowerRank var =
56+ {-# SCC elm_compiler_type_register #-}
57+ do isRedundant <- liftIO $ UF.redundant var
58+ case isRedundant of
59+ True -> return ()
60+ False -> do
61+ desc <- liftIO $ UF.descriptor var
62+ case _rank desc < youngRank of
63+ True ->
64+ TS.register var >> return ()
65+ False ->
66+ liftIO $ UF.setDescriptor var $ desc
67+ { _rank = noRank
68+ , _content = rigidify (_content desc)
69+ }
6770
6871 mapM_ registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)
6972
@@ -82,6 +85,7 @@ rigidify content =
8285-- move deeper into a variable.
8386adjustRank :: Int -> Int -> Int -> Variable -> IO Int
8487adjustRank youngMark visitedMark groupRank var =
88+ {-# SCC elm_compiler_type_adjust #-}
8589 do descriptor <- UF.descriptor var
8690 adjustRankHelp youngMark visitedMark groupRank var descriptor
8791
@@ -92,12 +96,8 @@ adjustRankHelp youngMark visitedMark groupRank var descriptor@(Descriptor conten
9296
9397 do -- Set the variable as marked first because it may be cyclic.
9498 UF.modifyDescriptor var $ \desc -> desc { _mark = visitedMark }
95−
96− maxRank <-
97− adjustRankContent youngMark visitedMark groupRank content
98−
99+ maxRank <- adjustRankContent youngMark visitedMark groupRank content
99100 UF.modifyDescriptor var $ \desc -> desc { _rank = maxRank }
100−
101101 return maxRank
102102
103103 else if mark /= visitedMark then
@@ -151,6 +151,7 @@ adjustRankContent youngMark visitedMark groupRank content =
151151
152152solve :: TypeConstraint -> ExceptT [A.Located Error.Error] IO TS.State
153153solve constraint =
154+ {-# SCC elm_compiler_type_solve #-}
154155 do state <- liftIO (TS.run (actuallySolve constraint))
155156 case TS.sError state of
156157 [] ->
@@ -265,6 +266,7 @@ crash msg =
265266
266267occurs :: (Text.Text, A.Located Variable) -> TS.Solver ()
267268occurs (name, A.A region variable) =
269+ {-# SCC elm_compiler_type_occurs #-}
268270 do hasOccurred <- liftIO $ occursHelp [] variable
269271 case hasOccurred of
270272 False ->