@@ -14,6 +14,7 @@ import Text.PrettyPrint (Doc)
1414import SourceSyntax.Declaration
1515import SourceSyntax.Module
1616import qualified SourceSyntax.Expression as Expr
17+import qualified SourceSyntax.Pattern as Pattern
1718import qualified SourceSyntax.Type as Type
1819import qualified Parse.Parse as Parse
1920import qualified Metadata.Prelude as Prelude
@@ -23,41 +24,41 @@ import qualified Type.Inference as TI
2324import qualified Type.Constrain.Declaration as TcDecl
2425import qualified Transform.Canonicalize as Canonical
2526
26−build :: Bool -> Interfaces -> String -> Either [Doc] (MetadataModule () ())
27+build :: Bool -> Interfaces -> String -> Either [Doc] MetadataModule
2728build noPrelude interfaces source =
2829 do let add = if noPrelude then id else Prelude.add
2930 infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
3031 . concatMap iFixities $ Map.elems interfaces
3132
32− modul@(Module _ _ _ decls') <- add `fmap` Parse.program infixes source
33−
34− -- check for structural errors
35− Module names exs ims decls <-
36− case Check.mistakes decls' of
37− [] -> return modul
38− ms -> Left ms
33+ Module names exs ims decls <- do
34+ modul@(Module _ _ _ decls) <- add `fmap` Parse.program infixes source
35+ case Check.mistakes decls of
36+ [] -> return modul
37+ ms -> Left ms
3938
4039 let exports'
4140 | null exs =
42− let get = Set.toList . SD.boundVars in
43− concat [ get pattern | Definition (Expr.Def pattern _) <- decls ] ++
41+ let get = Set.toList . Pattern.boundVars in
42+ concat [ get pattern | Definition (Expr.Definition pattern _ _) <- decls ] ++
4443 concat [ map fst ctors | Datatype _ _ ctors _ <- decls ] ++
4544 [ name | TypeAlias name _ (Type.Record _ _) _ <- decls ]
4645 | otherwise = exs
4746
48− metaModule <- Canonical.metadataModule interfaces $ MetadataModule {
49− names = names,
50− path = FP.joinPath names,
51− exports = exports',
52− imports = ims,
47+ metaModule <- Canonical.metadataModule interfaces $
48+ MetadataModule
49+ { names = names
50+ , path = FP.joinPath names
51+ , exports = exports'
52+ , imports = ims
5353 -- reorder AST into strongly connected components
54− program = SD.sortDefs . Expr.dummyLet $ TcDecl.toExpr decls,
55− types = Map.empty,
56− datatypes = [ (name,vars,ctors,ds) | Datatype name vars ctors ds <- decls ],
57− fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ],
58− aliases = [ (name,tvs,tipe,ds) | TypeAlias name tvs tipe ds <- decls ],
59− ports = [ (name,tipe,maybe) | Port name tipe maybe <- decls ]
60− }
54+ , program = SD.sortDefs . Expr.dummyLet $ TcDecl.toExpr decls
55+ , types = Map.empty
56+ , datatypes = [ (name,vars,ctors,ds) | Datatype name vars ctors ds <- decls ]
57+ , fixities = [ (assoc,level,op) | Fixity assoc level op <- decls ]
58+ , aliases = [ (name,tvs,tipe,ds) | TypeAlias name tvs tipe ds <- decls ]
59+ , sendPorts = [ (name,expr,tipe) | Port (Send name expr tipe) <- decls ]
60+ , recvPorts = [ (name,expr,tipe) | Port (Recv name expr tipe) <- decls ]
61+ }
6162
6263 types <- TI.infer interfaces metaModule
6364