@@ -93,13 +93,11 @@ detectCycles sccs =
93 Graph.AcyclicSCC (def, _, _) ->
93 Graph.AcyclicSCC (def, _, _) ->
94 Can.Declare def <$> detectCycles otherSccs
94 Can.Declare def <$> detectCycles otherSccs
96− Graph.CyclicSCC [] ->
97− detectCycles otherSccs
99 Graph.CyclicSCC subNodes ->
96 Graph.CyclicSCC subNodes ->
101− <$> traverse detectBadCycles (Graph.stronglyConnComp subNodes)
97+ do defs <- traverse detectBadCycles (Graph.stronglyConnComp subNodes)
99+ [] -> detectCycles otherSccs
102− <*> detectCycles otherSccs
100+ d:ds -> Can.DeclareRec d ds <$> detectCycles otherSccs
105detectBadCycles :: Graph.SCC Can.Def -> Result i w Can.Def
103detectBadCycles :: Graph.SCC Can.Def -> Result i w Can.Def
@@ -108,8 +106,22 @@ detectBadCycles scc =
108 Graph.AcyclicSCC def ->
106 Graph.AcyclicSCC def ->
109 Result.ok def
107 Result.ok def
111− Graph.CyclicSCC cyclicValueDefs ->
109+ Graph.CyclicSCC [] ->
110+ error "The definition of Data.Graph.SCC should not allow empty CyclicSCC!"
112+ Graph.CyclicSCC (def:defs) ->
114+ (A.At region name) = extractDefName def
115+ names = map (A.toValue . extractDefName) defs
112− Result.throw (Error.RecursiveDecl cyclicValueDefs)
117+ Result.throw (Error.RecursiveDecl region name names)
120+extractDefName :: Can.Def -> A.Located Name.Name
123+ Can.Def name _ _ -> name
124+ Can.TypedDef name _ _ _ _ -> name