@@ -111,13 +111,14 @@ collectDeclarations imports exports = do
111 valsAndMembers <- collect lookupValueDeclaration impVals expVals
111 valsAndMembers <- collect lookupValueDeclaration impVals expVals
112 typeClasses <- collect lookupTypeClassDeclaration impTCs expTCs
112 typeClasses <- collect lookupTypeClassDeclaration impTCs expTCs
113 types <- collect lookupTypeDeclaration impTypes expTypes
113 types <- collect lookupTypeDeclaration impTypes expTypes
114+ typeOps <- collect lookupTypeOpDeclaration impTypeOps expTypeOps
115 (vals, classes) <- handleTypeClassMembers valsAndMembers typeClasses
116 (vals, classes) <- handleTypeClassMembers valsAndMembers typeClasses
117 let filteredTypes = filterDataConstructors expCtors types
118 let filteredTypes = filterDataConstructors expCtors types
118 let filteredClasses = filterTypeClassMembers (map fst expVals) classes
119 let filteredClasses = filterTypeClassMembers (map fst expVals) classes
120− pure (Map.toList (Map.unionsWith (<>) [filteredTypes, filteredClasses, vals]))
121+ pure (Map.toList (Map.unionsWith (<>) [filteredTypes, typeOps, filteredClasses, vals]))
123 collect lookup' imps exps = do
124 collect lookup' imps exps = do
@@ -130,6 +131,9 @@ collectDeclarations imports exports = do
130 expTypes = map (first fst) (P.exportedTypes exports)
131 expTypes = map (first fst) (P.exportedTypes exports)
131 impTypes = concat (Map.elems (P.importedTypes imports))
132 impTypes = concat (Map.elems (P.importedTypes imports))
134+ expTypeOps = P.exportedTypeOps exports
135+ impTypeOps = concat (Map.elems (P.importedTypeOps imports))
133 expCtors = concatMap (snd . fst) (P.exportedTypes exports)
137 expCtors = concatMap (snd . fst) (P.exportedTypes exports)
135 expTCs = P.exportedTypeClasses exports
139 expTCs = P.exportedTypeClasses exports
@@ -180,7 +184,7 @@ lookupValueDeclaration importedFrom ident = do
182 filter (\d -> declTitle d == P.showIdent ident
186 filter (\d -> declTitle d == P.showIdent ident
183− && (isValue d || isAlias d)) decls
187+ && (isValue d || isValueAlias d)) decls
184 errOther other =
188 errOther other =
185 internalErrorInModule
189 internalErrorInModule
186 ("lookupValueDeclaration: unexpected result:\n" ++
190 ("lookupValueDeclaration: unexpected result:\n" ++
@@ -243,6 +247,23 @@ lookupTypeDeclaration importedFrom ty = do
243 internalErrorInModule
247 internalErrorInModule
244 ("lookupTypeDeclaration: unexpected result: " ++ show other)
248 ("lookupTypeDeclaration: unexpected result: " ++ show other)
250+lookupTypeOpDeclaration ::
251+ (MonadState (Map P.ModuleName Module) m,
252+ MonadReader P.ModuleName m) =>
255+ m (P.ModuleName, [Declaration])
256+lookupTypeOpDeclaration importedFrom tyOp = do
257+ decls <- lookupModuleDeclarations "lookupTypeOpDeclaration" importedFrom
259+ ds = filter (\d -> declTitle d == ("type " ++ P.showIdent tyOp) && isTypeAlias d) decls
262+ pure (importedFrom, [d])
264+ internalErrorInModule
265+ ("lookupTypeOpDeclaration: unexpected result: " ++ show other)
246lookupTypeClassDeclaration ::
267lookupTypeClassDeclaration ::
247 (MonadState (Map P.ModuleName Module) m,
268 (MonadState (Map P.ModuleName Module) m,
248 MonadReader P.ModuleName m) =>
269 MonadReader P.ModuleName m) =>