@@ -111,13 +111,14 @@ collectDeclarations imports exports = do
111111 valsAndMembers <- collect lookupValueDeclaration impVals expVals
112112 typeClasses <- collect lookupTypeClassDeclaration impTCs expTCs
113113 types <- collect lookupTypeDeclaration impTypes expTypes
114+ typeOps <- collect lookupTypeOpDeclaration impTypeOps expTypeOps
114115
115116 (vals, classes) <- handleTypeClassMembers valsAndMembers typeClasses
116117
117118 let filteredTypes = filterDataConstructors expCtors types
118119 let filteredClasses = filterTypeClassMembers (map fst expVals) classes
119120
120− pure (Map.toList (Map.unionsWith (<>) [filteredTypes, filteredClasses, vals]))
121+ pure (Map.toList (Map.unionsWith (<>) [filteredTypes, typeOps, filteredClasses, vals]))
121122
122123 where
123124 collect lookup' imps exps = do
@@ -130,6 +131,9 @@ collectDeclarations imports exports = do
130131 expTypes = map (first fst) (P.exportedTypes exports)
131132 impTypes = concat (Map.elems (P.importedTypes imports))
132133
134+ expTypeOps = P.exportedTypeOps exports
135+ impTypeOps = concat (Map.elems (P.importedTypeOps imports))
136+
133137 expCtors = concatMap (snd . fst) (P.exportedTypes exports)
134138
135139 expTCs = P.exportedTypeClasses exports
@@ -180,7 +184,7 @@ lookupValueDeclaration importedFrom ident = do
180184 let
181185 rs =
182186 filter (\d -> declTitle d == P.showIdent ident
183− && (isValue d || isAlias d)) decls
187+ && (isValue d || isValueAlias d)) decls
184188 errOther other =
185189 internalErrorInModule
186190 ("lookupValueDeclaration: unexpected result:\n" ++
@@ -243,6 +247,23 @@ lookupTypeDeclaration importedFrom ty = do
243247 internalErrorInModule
244248 ("lookupTypeDeclaration: unexpected result: " ++ show other)
245249
250+lookupTypeOpDeclaration ::
251+ (MonadState (Map P.ModuleName Module) m,
252+ MonadReader P.ModuleName m) =>
253+ P.ModuleName ->
254+ P.Ident ->
255+ m (P.ModuleName, [Declaration])
256+lookupTypeOpDeclaration importedFrom tyOp = do
257+ decls <- lookupModuleDeclarations "lookupTypeOpDeclaration" importedFrom
258+ let
259+ ds = filter (\d -> declTitle d == ("type " ++ P.showIdent tyOp) && isTypeAlias d) decls
260+ case ds of
261+ [d] ->
262+ pure (importedFrom, [d])
263+ other ->
264+ internalErrorInModule
265+ ("lookupTypeOpDeclaration: unexpected result: " ++ show other)
266+
246267lookupTypeClassDeclaration ::
247268 (MonadState (Map P.ModuleName Module) m,
248269 MonadReader P.ModuleName m) =>