@@ -1,24 +1,22 @@
11module AST.Module
2− ( Interfaces, CanonicalInterfaces
2+ ( Interfaces
33 , Types, Aliases, ADTs
44 , AdtInfo, CanonicalAdt
55 , SourceModule, ValidModule, CanonicalModule, Optimized
66 , Module(..), Body(..)
77 , Header(..)
8− , Name, nameToString, nameIsNative
9− , CanonicalName(..), canonPkg, canonModul
108 , Interface(..), toInterface
119 , UserImport, DefaultImport, ImportMethod(..)
1210 ) where
1311
1412import Control.Applicative ((<$>),(<*>))
1513import Data.Binary
16−import qualified Data.List as List
1714import qualified Data.Map as Map
1815
1916import qualified AST.Declaration as Decl
2017import qualified AST.Expression.Canonical as Canonical
2118import qualified AST.Expression.Optimized as Optimized
19+import qualified AST.Module.Name as Name
2220import qualified AST.Type as Type
2321import qualified AST.Variable as Var
2422import qualified Docs.AST as Docs
@@ -29,8 +27,7 @@ import qualified Reporting.Annotation as A
2927
3028-- HELPFUL TYPE ALIASES
3129
32−type Interfaces = Map.Map Name Interface
33−type CanonicalInterfaces = Map.Map CanonicalName Interface
30+type Interfaces = Map.Map Name.Canonical Interface
3431
3532type Types = Map.Map String Type.Canonical
3633type Aliases = Map.Map String ([String], Type.Canonical)
@@ -59,15 +56,15 @@ type ValidModule =
5956
6057
6158type CanonicalModule =
62− Module Docs.Centralized [Name] [Var.Value] (Body Canonical.Expr)
59+ Module Docs.Centralized [Name.Raw] [Var.Value] (Body Canonical.Expr)
6360
6461
6562type Optimized =
66− Module Docs.Centralized [Name] [Var.Value] (Body Optimized.Expr)
63+ Module Docs.Centralized [Name.Raw] [Var.Value] (Body Optimized.Expr)
6764
6865
6966data Module docs imports exports body = Module
70− { names :: Name
67+ { name :: Name.Canonical
7168 , path :: FilePath
7269 , docs :: A.Located (Maybe docs)
7370 , exports :: exports
@@ -90,41 +87,19 @@ data Body expr = Body
9087
9188{-| Basic info needed to identify modules and determine dependencies. -}
9289data Header imports = Header
93− { _names :: Name
90+ { _name :: Name.Raw
9491 , _docs :: A.Located (Maybe String)
9592 , _exports :: Var.Listing (A.Located Var.Value)
9693 , _imports :: imports
9794 }
9895
9996
100−type Name = [String] -- must be non-empty
101−
102−
103−data CanonicalName =
104− CanonicalName
105− { canonPkg :: Package.Name
106− , canonModul :: Name
107− }
108−
109−
110−nameToString :: Name -> String
111−nameToString =
112− List.intercalate "."
113−
114−
115−nameIsNative :: Name -> Bool
116−nameIsNative name =
117− case name of
118− "Native" : _ -> True
119− _ -> False
120−
121−
12297-- IMPORTs
12398
124−type UserImport = A.Located (Name, ImportMethod)
99+type UserImport = A.Located (Name.Raw, ImportMethod)
125100
126101
127−type DefaultImport = (Name, ImportMethod)
102+type DefaultImport = (Name.Raw, ImportMethod)
128103
129104
130105data ImportMethod = ImportMethod
@@ -137,15 +112,15 @@ data ImportMethod = ImportMethod
137112
138113{-| Key facts about a module, used when reading info from .elmi files. -}
139114data Interface = Interface
140− { iVersion :: String
115+ { iVersion :: Package.Version
116+ , iPackage :: Package.Name
141117 , iExports :: [Var.Value]
142118 , iTypes :: Types
143− , iImports :: [Name]
119+ , iImports :: [Name.Raw]
144120 , iAdts :: ADTs
145121 , iAliases :: Aliases
146122 , iFixities :: [(Decl.Assoc, Int, String)]
147123 , iPorts :: [String]
148− , iPackage :: Package.Name
149124 }
150125
151126
@@ -153,7 +128,8 @@ toInterface :: Package.Name -> CanonicalModule -> Interface
153128toInterface pkgName modul =
154129 let body' = body modul in
155130 Interface
156− { iVersion = Package.versionToString Compiler.version
131+ { iVersion = Compiler.version
132+ , iPackage = pkgName
157133 , iExports = exports modul
158134 , iTypes = types body'
159135 , iImports = imports modul
@@ -161,7 +137,6 @@ toInterface pkgName modul =
161137 , iAliases = aliases body'
162138 , iFixities = fixities body'
163139 , iPorts = ports body'
164− , iPackage = pkgName
165140 }
166141
167142
@@ -169,6 +144,7 @@ instance Binary Interface where
169144 get = Interface <$> get <*> get <*> get <*> get <*> get <*> get <*> get <*> get <*> get
170145 put modul = do
171146 put (iVersion modul)
147+ put (iPackage modul)
172148 put (iExports modul)
173149 put (iTypes modul)
174150 put (iImports modul)
@@ -176,4 +152,3 @@ instance Binary Interface where
176152 put (iAliases modul)
177153 put (iFixities modul)
178154 put (iPorts modul)
179− put (iPackage modul)