@@ -1,15 +1,12 @@
11module Initialize (buildFromSource, getSortedModuleNames) where
22
3−import Control.Applicative ((<$>))
4−import Control.Monad.Error
5−import Data.List (nub)
63import qualified Data.Map as Map
74import Data.Data
85import qualified Data.Graph as Graph
96import qualified Data.List as List
107import System.Exit
118import System.FilePath as FP
12−import Text.PrettyPrint as P
9+import Text.PrettyPrint (Doc)
1310
1411import SourceSyntax.Everything
1512import SourceSyntax.Declaration (Assoc)
@@ -21,18 +18,17 @@ import qualified Transform.Check as Check
2118import qualified Transform.SortDefinitions as SD
2219import qualified Type.Inference as TI
2320import qualified Type.Constrain.Declaration as TcDecl
24−import qualified Type.Type as T
2521
26−import System.IO.Unsafe
2722
28−
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)
3024buildFromSource noPrelude src =
31− do modul <- Parse.program src
25+ do modul@(Module _ _ _ decls) <- Parse.program src
3226
3327 -- check for structural errors
34− Module names exs ims decls <- checkMistakes modul
35−
28+ Module names exs ims decls <-
29+ case Check.mistakes decls of
30+ [] -> return modul
31+ ms -> Left ms
3632
3733 let metaModule = MetadataModule {
3834 names = names,
@@ -51,17 +47,7 @@ buildFromSource noPrelude src =
5147
5248 types <- TI.infer metaModule
5349
54− let env = forM (Map.toList types) $ \(n,t) -> do
55− pt <- T.extraPretty t
56− print $ P.text n <+> P.text ":" <+> pt
57−
58− return $ unsafePerformIO env `seq` metaModule { types = types }
59−
60− where
61− checkMistakes modul@(Module _ _ _ decls) =
62− case Check.mistakes decls of
63− [] -> return modul
64− ms -> Left ms
50+ return $ metaModule { types = types }
6551
6652
6753getSortedModuleNames :: FilePath -> IO [String]