@@ -1,4 +1,4 @@
1−module Initialize (buildFromSource, getSortedModuleNames, TypeLibrary) where
1+module Initialize (buildFromSource, getSortedModuleNames, Interfaces) where
3import qualified Data.Map as Map
3import qualified Data.Map as Map
4import Data.Data
4import Data.Data
@@ -17,15 +17,14 @@ import qualified Transform.SortDefinitions as SD
17import qualified Type.Inference as TI
17import qualified Type.Inference as TI
18import qualified Type.Constrain.Declaration as TcDecl
18import qualified Type.Constrain.Declaration as TcDecl
20−
20+import System.IO.Unsafe
21−type TypeLibrary = Map.Map String ModuleInterface
23buildFromSource ::
22buildFromSource ::
24 (Data t, Data v) =>
23 (Data t, Data v) =>
25− TypeLibrary ->
24+ Interfaces ->
27 Either [Doc] (MetadataModule t v)
26 Either [Doc] (MetadataModule t v)
28−buildFromSource typeLibrary source =
27+buildFromSource interfaces source =
29 do modul@(Module _ _ _ decls') <- Parse.program source
28 do modul@(Module _ _ _ decls') <- Parse.program source
31 -- check for structural errors
30 -- check for structural errors
@@ -42,14 +41,15 @@ buildFromSource typeLibrary source =
42 -- reorder AST into strongly connected components
41 -- reorder AST into strongly connected components
43 program = SD.sortDefs . dummyLet $ TcDecl.toExpr decls,
42 program = SD.sortDefs . dummyLet $ TcDecl.toExpr decls,
44 types = Map.empty,
43 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),
46 fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ],
46 fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ],
47 aliases = [ (name,tvs,tipe) | TypeAlias name tvs tipe <- decls ],
47 aliases = [ (name,tvs,tipe) | TypeAlias name tvs tipe <- decls ],
48 foreignImports = [ (evt,v,name,typ) | ImportEvent evt v name typ <- decls ],
48 foreignImports = [ (evt,v,name,typ) | ImportEvent evt v name typ <- decls ],
49 foreignExports = [ (evt,name,typ) | ExportEvent evt name typ <- decls ]
49 foreignExports = [ (evt,name,typ) | ExportEvent evt name typ <- decls ]
52− types <- TI.infer metaModule
52+ types <- TI.infer interfaces metaModule
54 return $ metaModule { types = types }
54 return $ metaModule { types = types }