@@ -93,13 +93,11 @@ detectCycles sccs =
9393 Graph.AcyclicSCC (def, _, _) ->
9494 Can.Declare def <$> detectCycles otherSccs
9595
96− Graph.CyclicSCC [] ->
97− detectCycles otherSccs
98−
9996 Graph.CyclicSCC subNodes ->
100− Can.DeclareRec
101− <$> traverse detectBadCycles (Graph.stronglyConnComp subNodes)
102− <*> detectCycles otherSccs
97+ do defs <- traverse detectBadCycles (Graph.stronglyConnComp subNodes)
98+ case defs of
99+ [] -> detectCycles otherSccs
100+ d:ds -> Can.DeclareRec d ds <$> detectCycles otherSccs
103101
104102
105103detectBadCycles :: Graph.SCC Can.Def -> Result i w Can.Def
@@ -108,8 +106,22 @@ detectBadCycles scc =
108106 Graph.AcyclicSCC def ->
109107 Result.ok def
110108
111− Graph.CyclicSCC cyclicValueDefs ->
112− Result.throw (Error.RecursiveDecl cyclicValueDefs)
109+ Graph.CyclicSCC [] ->
110+ error "The definition of Data.Graph.SCC should not allow empty CyclicSCC!"
111+
112+ Graph.CyclicSCC (def:defs) ->
113+ let
114+ (A.At region name) = extractDefName def
115+ names = map (A.toValue . extractDefName) defs
116+ in
117+ Result.throw (Error.RecursiveDecl region name names)
118+
119+
120+extractDefName :: Can.Def -> A.Located Name.Name
121+extractDefName def =
122+ case def of
123+ Can.Def name _ _ -> name
124+ Can.TypedDef name _ _ _ _ -> name
113125
114126
115127