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
80 , srcSettings :: SourceSettings
81 , srcDocs :: A.Located (Maybe Text)
82 , srcExports :: Var.Listing (A.Located Var.Value)
83 , srcImports :: [UserImport]
84 , srcDecls :: [Decl.Source]
95 A.Located [(A.Located Text, A.Located Text)]
98emptySettings :: SourceSettings
100 A.A (error "region of empty settings should not be needed") []
109 { validDocs :: A.Located (Maybe Text)
110 , validExports :: Var.Listing (A.Located Var.Value)
111 , validImports :: ([DefaultImport], [UserImport])
112 , validDecls :: Decl.Valid
113 , validEffects :: Effects.Raw
118 Module (Info Canonical.Expr)
122 Module (Info [Optimized.Def])
129type UserImport = A.Located (Name.Raw, ImportMethod)
132type DefaultImport = (Name.Raw, ImportMethod)
137 { alias :: Maybe Text
138 , exposedVars :: !(Var.Listing Var.Value)
143-- LATE PHASE MODULE INFORMATION
148 { docs :: A.Located (Maybe Docs.Centralized)
149 , exports :: [Var.Value]
150 , imports :: [Name.Raw]
153 , fixities :: [Decl.Infix]
156 , effects :: Effects.Canonical
161 Map.Map Text Type.Canonical
165 Map.Map Text ([Text], Type.Canonical)
169 Map.Map Text (UnionInfo Text)
173 ( [Text], [(v, [Type.Canonical])] )
177 ( Var.Canonical, UnionInfo Var.Canonical )
185 Map.Map Name.Canonical Interface
188{-| Key facts about a module, used when reading info from .elmi files. -}
191 { iExports :: [Var.Value]
192 , iImports :: [Name.Raw] -- TODO perhaps use this to crawl faster
195 , iAliases :: Aliases
196 , iFixities :: [Decl.Infix]
200toInterface :: Optimized -> Interface
207 { iExports = exports myInfo
208 , iImports = imports myInfo
209 , iTypes = types myInfo
210 , iUnions = unions myInfo
211 , iAliases = aliases myInfo
212 , iFixities = fixities myInfo
216privatize :: Interface -> Maybe Interface
217privatize (Interface _ _ _ myUnions myAliases _) =
218 if Map.null myUnions && Map.null myAliases then
227 , iAliases = myAliases
232instance Binary Interface where
234 Interface <$> get <*> get <*> get <*> get <*> get <*> get
237 do put (iExports modul)
242 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