@@ -40,7 +40,7 @@ import qualified Type.Error as T
4040data Error
4141 = BadExpr R.Region Category T.Type (Expected T.Type)
4242 | BadPattern R.Region PCategory T.Type (PExpected T.Type)
43− | InfiniteType T.Type
43+ | InfiniteType R.Region N.Name T.Type
4444
4545
4646
@@ -170,8 +170,8 @@ toReport source localizer err =
170170 BadPattern region category tipe expected ->
171171 toPatternReport source localizer region category tipe expected
172172
173− InfiniteType overallType ->
174− error "TODO" source localizer overallType
173+ InfiniteType region name overallType ->
174+ toInfiniteReport source localizer region name overallType
175175
176176
177177
@@ -1250,3 +1250,28 @@ badEquality localizer op tipe expectedType =
12501250 ]
12511251 )
12521252 )
1253+
1254+
1255+
1256+-- INFINITE TYPES
1257+
1258+
1259+toInfiniteReport :: Code.Source -> T.Localizer -> R.Region -> N.Name -> T.Type -> Report.Report
1260+toInfiniteReport source localizer region name overallType =
1261+ Report.Report "INFINITE TYPE" region [] $
1262+ Report.toCodeSnippet source region Nothing
1263+ (
1264+ H.reflow $
1265+ "I am inferring a weird self-referential type for " <> N.toString name <> ":"
1266+ ,
1267+ H.stack
1268+ [ H.reflow $
1269+ "Here is my best effort at writing down the type. You will see ∞ for\
1270+ \ parts of the type that repeat something already printed out infinitely."
1271+ , indentType localizer overallType
1272+ , H.reflowLink
1273+ "Staring at the type is usually not so helpful, so I recommend reading the hints at"
1274+ "infinite-type"
1275+ "to get unstuck."
1276+ ]
1277+ )