1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
4 ( Header(..), defaultHeader, Module(..)
6 , Source, SourceInfo(..), SourceTag(..), SourceSettings, emptySettings
8 , Canonical, Optimized, Info(..)
10 , UserImport, DefaultImport, ImportMethod(..)
14 , Unions, UnionInfo, CanonicalUnion
16 , Interfaces, Interface(..), toInterface, privatize
21import qualified Data.Map as Map
22import Data.Text (Text)
24import qualified AST.Declaration as Decl
25import qualified AST.Effects as Effects
26import qualified AST.Expression.Canonical as Canonical
27import qualified AST.Expression.Optimized as Optimized
28import qualified AST.Module.Name as Name
29import qualified AST.Type as Type
30import qualified AST.Variable as Var
31import qualified Docs.AST as Docs
32import qualified Reporting.Annotation as A
33import qualified Reporting.Region as R
40{-| Basic info needed to identify modules and determine dependencies. -}
45 , _exports :: Var.Listing (A.Located Var.Value)
46 , _settings :: SourceSettings
47 , _docs :: A.Located (Maybe Text)
52instance Show (Header a) where
57defaultHeader :: R.Position -> R.Position -> imports -> Header imports
58defaultHeader start end imports_ =
59 Header Normal "Main" Var.openListing emptySettings (A.at start end Nothing) imports_
68 { name :: Name.Canonical
81 , srcSettings :: SourceSettings
82 , srcDocs :: A.Located (Maybe Text)
83 , srcExports :: Var.Listing (A.Located Var.Value)
84 , srcImports :: [UserImport]
85 , srcDecls :: [Decl.Source]
96 A.Located [(A.Located Text, A.Located Text)]
99emptySettings :: SourceSettings
101 A.A (error "region of empty settings should not be needed") []
110 { validDocs :: A.Located (Maybe Text)
111 , validExports :: Var.Listing (A.Located Var.Value)
112 , validImports :: ([DefaultImport], [UserImport])
113 , validDecls :: Decl.Valid
114 , validEffects :: Effects.Raw
119 Module (Info Canonical.Expr)
123 Module (Info [Optimized.Def])
130type UserImport = A.Located (Name.Raw, ImportMethod)
133type DefaultImport = (Name.Raw, ImportMethod)
138 { alias :: Maybe Text
139 , exposedVars :: !(Var.Listing Var.Value)
144-- LATE PHASE MODULE INFORMATION
149 { docs :: A.Located (Maybe Docs.Centralized)
150 , exports :: [Var.Value]
151 , imports :: [Name.Raw]
154 , fixities :: [Decl.Infix]
157 , effects :: Effects.Canonical
162 Map.Map Text Type.Canonical
166 Map.Map Text ([Text], Type.Canonical)
170 Map.Map Text (UnionInfo Text)
174 ( [Text], [(v, [Type.Canonical])] )
178 ( Var.Canonical, UnionInfo Var.Canonical )
186 Map.Map Name.Canonical Interface
189{-| Key facts about a module, used when reading info from .elmi files. -}
192 { iExports :: [Var.Value]
193 , iImports :: [Name.Raw] -- TODO perhaps use this to crawl faster
196 , iAliases :: Aliases
197 , iFixities :: [Decl.Infix]
201toInterface :: Optimized -> Interface
208 { iExports = exports myInfo
209 , iImports = imports myInfo
210 , iTypes = types myInfo
211 , iUnions = unions myInfo
212 , iAliases = aliases myInfo
213 , iFixities = fixities myInfo
217privatize :: Interface -> Maybe Interface
218privatize (Interface _ _ _ myUnions myAliases _) =
219 if Map.null myUnions && Map.null myAliases then
228 , iAliases = myAliases
233instance Binary Interface where
235 Interface <$> get <*> get <*> get <*> get <*> get <*> get
238 do put (iExports modul)
243 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