@@ -1,15 +1,12 @@
1module Initialize (buildFromSource, getSortedModuleNames) where
1module Initialize (buildFromSource, getSortedModuleNames) where
3−import Control.Applicative ((<$>))
4−import Control.Monad.Error
6import qualified Data.Map as Map
3import qualified Data.Map as Map
7import Data.Data
4import Data.Data
8import qualified Data.Graph as Graph
5import qualified Data.Graph as Graph
9import qualified Data.List as List
6import qualified Data.List as List
10import System.Exit
7import System.Exit
11import System.FilePath as FP
8import System.FilePath as FP
12−import Text.PrettyPrint as P
9+import Text.PrettyPrint (Doc)
14import SourceSyntax.Everything
11import SourceSyntax.Everything
15import SourceSyntax.Declaration (Assoc)
12import SourceSyntax.Declaration (Assoc)
@@ -21,18 +18,17 @@ import qualified Transform.Check as Check
21import qualified Transform.SortDefinitions as SD
18import qualified Transform.SortDefinitions as SD
22import qualified Type.Inference as TI
19import qualified Type.Inference as TI
23import qualified Type.Constrain.Declaration as TcDecl
20import qualified Type.Constrain.Declaration as TcDecl
24−import qualified Type.Type as T
26−import System.IO.Unsafe
29−buildFromSource :: (Data t, Data v) => Bool -> String -> Either [P.Doc] (MetadataModule t v)
23+buildFromSource :: (Data t, Data v) => Bool -> String -> Either [Doc] (MetadataModule t v)
30buildFromSource noPrelude src =
24buildFromSource noPrelude src =
31− do modul <- Parse.program src
25+ do modul@(Module _ _ _ decls) <- Parse.program src
33 -- check for structural errors
27 -- check for structural errors
34− Module names exs ims decls <- checkMistakes modul
28+ Module names exs ims decls <-
35−
29+ case Check.mistakes decls of
37 let metaModule = MetadataModule {
33 let metaModule = MetadataModule {
38 names = names,
34 names = names,
@@ -51,17 +47,7 @@ buildFromSource noPrelude src =
52 types <- TI.infer metaModule
48 types <- TI.infer metaModule
54− let env = forM (Map.toList types) $ \(n,t) -> do
55− pt <- T.extraPretty t
56− print $ P.text n <+> P.text ":" <+> pt
58− return $ unsafePerformIO env `seq` metaModule { types = types }
50+ return $ metaModule { types = types }
61− checkMistakes modul@(Module _ _ _ decls) =
62− case Check.mistakes decls of
67getSortedModuleNames :: FilePath -> IO [String]
53getSortedModuleNames :: FilePath -> IO [String]