@@ -1,4 +1,4 @@
1−module Initialize (buildFromSource, getSortedModuleNames, TypeLibrary) where
1+module Initialize (buildFromSource, getSortedModuleNames, Interfaces) where
22
33import qualified Data.Map as Map
44import Data.Data
@@ -17,15 +17,14 @@ import qualified Transform.SortDefinitions as SD
1717import qualified Type.Inference as TI
1818import qualified Type.Constrain.Declaration as TcDecl
1919
20−
21−type TypeLibrary = Map.Map String ModuleInterface
20+import System.IO.Unsafe
2221
2322buildFromSource ::
2423 (Data t, Data v) =>
25− TypeLibrary ->
24+ Interfaces ->
2625 String ->
2726 Either [Doc] (MetadataModule t v)
28−buildFromSource typeLibrary source =
27+buildFromSource interfaces source =
2928 do modul@(Module _ _ _ decls') <- Parse.program source
3029
3130 -- check for structural errors
@@ -42,14 +41,15 @@ buildFromSource typeLibrary source =
4241 -- reorder AST into strongly connected components
4342 program = SD.sortDefs . dummyLet $ TcDecl.toExpr decls,
4443 types = Map.empty,
45− datatypes = [ (name, vars, ctors) | Datatype name vars ctors <- decls ],
44+ datatypes = [ (name, vars, ctors) | Datatype name vars ctors <- decls ] ++
45+ concatMap iAdts (Map.elems interfaces),
4646 fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ],
4747 aliases = [ (name,tvs,tipe) | TypeAlias name tvs tipe <- decls ],
4848 foreignImports = [ (evt,v,name,typ) | ImportEvent evt v name typ <- decls ],
4949 foreignExports = [ (evt,name,typ) | ExportEvent evt name typ <- decls ]
5050 }
5151
52− types <- TI.infer metaModule
52+ types <- TI.infer interfaces metaModule
5353
5454 return $ metaModule { types = types }
5555