From 204109b01721803004e1512315716dade4e9c8bf Mon Sep 17 00:00:00 2001 From: Lukasz Czajka Date: Wed, 13 Sep 2023 11:35:42 +0200 Subject: [PATCH] fix instance import dependency --- src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs b/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs index 8a15eb817e..1062754301 100644 --- a/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs +++ b/src/Juvix/Compiler/Internal/Extra/DependencyBuilder.hs @@ -84,12 +84,15 @@ goModuleNoVisited (ModuleIndex m) = do goImport :: (Members '[Reader ExportsTable, State DependencyGraph, State StartNodes, Visit ModuleIndex] r) => Import -> Sem r () goImport (Import m) = visit m --- | Ignores includes -goPreModule :: (Members '[Reader ExportsTable, State DependencyGraph, State StartNodes] r) => PreModule -> Sem r () +goPreModule :: (Members '[Reader ExportsTable, State DependencyGraph, State StartNodes, Visit ModuleIndex] r) => PreModule -> Sem r () goPreModule m = do checkStartNode (m ^. moduleName) let b = m ^. moduleBody mapM_ (goPreStatement (m ^. moduleName)) (b ^. moduleStatements) + -- We cannot ignore imports with instances, because a trait in a module M may + -- depend on an instance in a module N which imports M (i.e. new edges may be + -- added from definitions in M to definitions in N) + mapM_ goImport (b ^. moduleImports) goStatement :: forall r. (Members '[Reader ExportsTable, State DependencyGraph, State StartNodes] r) => Name -> Statement -> Sem r () goStatement parentModule = \case