1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
4 ( Header(..), HeaderDecl(..), defaultHeaderDecl
7 , Source, SourceInfo(..), SourceTag(..), SourceSettings, emptySettings
9 , Canonical, Optimized, Info(..)
11 , UserImport, DefaultImport, ImportMethod(..)
15 , Unions, UnionInfo, CanonicalUnion
17 , Interfaces, Interface(..), toInterface, privatize
22import qualified Data.Map as Map
23import Data.Text (Text)
25import qualified AST.Declaration as Decl
26import qualified AST.Effects as Effects
27import qualified AST.Expression.Canonical as Canonical
28import qualified AST.Expression.Optimized as Optimized
29import qualified AST.Module.Name as Name
30import qualified AST.Type as Type
31import qualified AST.Variable as Var
32import qualified Docs.AST as Docs
33import qualified Reporting.Annotation as A
34import qualified Reporting.Region as R
41{-| Basic info needed to identify modules and determine dependencies. -}
44 { _decl :: Maybe HeaderDecl
53 , _exports :: Var.Listing (A.Located Var.Value)
54 , _settings :: SourceSettings
55 , _docs :: A.Located (Maybe Text)
59defaultHeaderDecl :: HeaderDecl
63 noDocs = A.at zero zero Nothing
65 HeaderDecl Normal "Main" Var.openListing emptySettings noDocs
74 { name :: Name.Canonical
86 , srcSettings :: SourceSettings
87 , srcDocs :: A.Located (Maybe Text)
88 , srcExports :: Var.Listing (A.Located Var.Value)
89 , srcImports :: [UserImport]
90 , srcDecls :: [Decl.Source]
101 A.Located [(A.Located Text, A.Located Text)]
104emptySettings :: SourceSettings
106 A.A (error "region of empty settings should not be needed") []
115 { validDocs :: A.Located (Maybe Text)
116 , validExports :: Var.Listing (A.Located Var.Value)
117 , validImports :: ([DefaultImport], [UserImport])
118 , validDecls :: Decl.Valid
119 , validEffects :: Effects.Raw
124 Module (Info Canonical.Expr)
128 Module (Info [Optimized.Def])
135type UserImport = A.Located (Name.Raw, ImportMethod)
138type DefaultImport = (Name.Raw, ImportMethod)
143 { alias :: Maybe Text
144 , exposedVars :: !(Var.Listing Var.Value)
149-- LATE PHASE MODULE INFORMATION
154 { docs :: A.Located (Maybe Docs.Centralized)
155 , exports :: [Var.Value]
156 , imports :: [Name.Raw]
159 , fixities :: [Decl.Infix]
162 , effects :: Effects.Canonical
167 Map.Map Text Type.Canonical
171 Map.Map Text ([Text], Type.Canonical)
175 Map.Map Text (UnionInfo Text)
179 ( [Text], [(v, [Type.Canonical])] )
183 ( Var.Canonical, UnionInfo Var.Canonical )
191 Map.Map Name.Canonical Interface
194{-| Key facts about a module, used when reading info from .elmi files. -}
197 { iExports :: [Var.Value]
198 , iImports :: [Name.Raw] -- TODO perhaps use this to crawl faster
201 , iAliases :: Aliases
202 , iFixities :: [Decl.Infix]
206toInterface :: Optimized -> Interface
213 { iExports = exports myInfo
214 , iImports = imports myInfo
215 , iTypes = types myInfo
216 , iUnions = unions myInfo
217 , iAliases = aliases myInfo
218 , iFixities = fixities myInfo
222privatize :: Interface -> Maybe Interface
223privatize (Interface _ _ _ myUnions myAliases _) =
224 if Map.null myUnions && Map.null myAliases then
233 , iAliases = myAliases
238instance Binary Interface where
240 Interface <$> get <*> get <*> get <*> get <*> get <*> get
243 do put (iExports modul)
248 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