on eaff976 help sign in
elk/compiler/Build/Source.hs
29 lines 993 B history raw
1{-# OPTIONS_GHC -W #-}
2module Build.Source (build) where
4import qualified Data.Map as Map
5import Text.PrettyPrint (Doc)
7import AST.Module
8import qualified Parse.Parse as Parse
9import qualified Metadata.Prelude as Prelude
10import qualified Transform.Check as Check
11import qualified Type.Inference as TI
12import qualified Transform.Canonicalize as Canonical
14build :: Bool -> Interfaces -> String -> Either [Doc] CanonicalModule
15build noPrelude interfaces source =
16 do let infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
17 . concatMap iFixities $ Map.elems interfaces
19 validModule <- do
20 modul <- Prelude.add noPrelude `fmap` Parse.program infixes source
21 case Check.mistakes (body modul) of
22 [] -> return modul
23 ms -> Left ms
25 canonicalModule <- Canonical.module' interfaces validModule
27 types <- TI.infer interfaces canonicalModule
29 return $ canonicalModule { body = (body canonicalModule) { types = types } }