4 , AdtInfo, CanonicalAdt
5 , SourceModule, ValidModule, CanonicalModule
6 , Module(..), CanonicalBody(..)
8 , Name, nameToString, nameIsNative
9 , Interface(..), toInterface
10 , UserImport, DefaultImport, ImportMethod(..)
13import Control.Applicative ((<$>),(<*>))
15import qualified Data.List as List
16import qualified Data.Map as Map
18import qualified AST.Declaration as Decl
19import qualified AST.Expression.Canonical as Canonical
20import qualified AST.Type as Type
21import qualified AST.Variable as Var
22import qualified Docs.AST as Docs
23import qualified Elm.Compiler.Version as Compiler
24import qualified Reporting.Annotation as A
27-- HELPFUL TYPE ALIASES
29type Interfaces = Map.Map Name Interface
31type Types = Map.Map String Type.Canonical
32type Aliases = Map.Map String ([String], Type.Canonical)
33type ADTs = Map.Map String (AdtInfo String)
35type AdtInfo v = ( [String], [(v, [Type.Canonical])] )
36type CanonicalAdt = (Var.Canonical, AdtInfo Var.Canonical)
45 (Var.Listing (A.Located Var.Value))
52 ([DefaultImport], [UserImport])
53 (Var.Listing (A.Located Var.Value))
58 Module Docs.Centralized [Name] [Var.Value] CanonicalBody
61data Module docs imports exports body = Module
64 , docs :: A.Located (Maybe docs)
71data CanonicalBody = CanonicalBody
72 { program :: Canonical.Expr
74 , fixities :: [(Decl.Assoc, Int, String)]
83{-| Basic info needed to identify modules and determine dependencies. -}
84data Header imports = Header
86 , _docs :: A.Located (Maybe String)
87 , _exports :: Var.Listing (A.Located Var.Value)
92type Name = [String] -- must be non-empty
95nameToString :: Name -> String
100nameIsNative :: Name -> Bool
109type UserImport = A.Located (Name, ImportMethod)
112type DefaultImport = (Name, ImportMethod)
115data ImportMethod = ImportMethod
116 { alias :: Maybe String
117 , exposedVars :: !(Var.Listing Var.Value)
123{-| Key facts about a module, used when reading info from .elmi files. -}
124data Interface = Interface
126 , iExports :: [Var.Value]
130 , iAliases :: Aliases
131 , iFixities :: [(Decl.Assoc, Int, String)]
136toInterface :: CanonicalModule -> Interface
138 let body' = body modul in
140 { iVersion = Compiler.version
141 , iExports = exports modul
142 , iTypes = types body'
143 , iImports = imports modul
144 , iAdts = datatypes body'
145 , iAliases = aliases body'
146 , iFixities = fixities body'
147 , iPorts = ports body'
151instance Binary Interface where
152 get = Interface <$> get <*> get <*> get <*> get <*> get <*> get <*> get <*> get
160 put (iFixities modul)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list