|
|
|
Description |
Needs IdSupply.
|
|
Synopsis |
|
data RenameState = RenameState Flags Id (Id, PackedString) [Map (TokenId, IdKind) Id] (Map (TokenId, IdKind) Id) (Map Id Info) [(Id, [(Pos, Id)])] (Maybe [Id]) [Error] [Id] | | type RenameToken = (PackedString -> Id -> TokenId -> TokenId, TokenId -> TokenId, TokenId -> IdKind -> IE, TokenId -> (InfixClass TokenId, Int)) | | type RenameToken2 = (PackedString -> Id -> TokenId -> TokenId, TokenId -> TokenId, TokenId -> IdKind -> IE) | | type RenameMonad a = State RenameToken RenameState a RenameState | | type RenameRMonad a b = State a RenameState b RenameState | | type RenameMonadEmpty = State0 RenameToken RenameState RenameState | | type RenameRMonadEmpty a = State0 a RenameState RenameState | | keepRS :: RenameState -> (Id, ((TokenId, IdKind) -> Id, (TokenId, IdKind) -> Maybe Id), (Id, PackedString), Map Id Info, [(Id, [(Pos, Id)])], Maybe [Id], [Error]) | | thisModule :: PackedString -> TokenId -> Bool | | is2rs :: Flags -> PackedString -> (TokenId -> [TokenId]) -> ((TokenId -> Bool) -> a) -> Overlap -> ImportState -> Either [Error] (TokenId -> TokenId, a, RenameState, Map (TokenId, IdKind) (Either [Pos] [Id])) | | fixFixityRS :: (TokenId -> (InfixClass TokenId, Int)) -> RenameState -> [(InfixClass TokenId, Int, [FixId TokenId])] -> (TokenId -> (InfixClass TokenId, Int), RenameState) | | getSymbolTableRS :: RenameState -> Map Id Info | | getErrorsRS :: RenameState -> (RenameState, [Error]) | | pushScope :: a -> RenameState -> RenameState | | popScope :: a -> (b, RenameState) -> (b, RenameState) | | renameError :: Error -> a -> RenameMonad a | | lookupAll :: [Map (TokenId, IdKind) Id] -> (TokenId, IdKind) -> Maybe Id | | uniqueTid :: Pos -> IdKind -> TokenId -> RenameMonad Id | | fixTid :: IdKind -> TokenId -> RenameMonad (InfixClass TokenId, Int) | | bindTid :: Pos -> IdKind -> TokenId -> a -> RenameState -> RenameState | | bindNK :: Pos -> RenameMonad TokenId | | checkPuns :: Pos -> t -> RenameState -> RenameState | | checkTid :: Pos -> IdKind -> TokenId -> RenameRMonad a Bool | | transTypes :: [(TokenId, Id)] -> [Id] -> [Context TokenId] -> [Type TokenId] -> RenameMonad NewType | | transTVar :: Pos -> [(TokenId, Id)] -> TokenId -> RenameMonad NT | | uniqueTVar :: (Eq a, Show a) => Pos -> [(a, Id)] -> a -> RenameMonad Id | | transContext :: [(TokenId, Id)] -> Context TokenId -> RenameMonad (Id, Id) | | transType :: [(TokenId, Id)] -> Type TokenId -> RenameMonad NT | | defineDefault :: [Type Id] -> a -> RenameState -> RenameState | | defineType :: TokenId -> NewType -> RenameMonad Id | | defineClass :: Pos -> TokenId -> NewType -> [(Id, Id)] -> RenameToken -> RenameState -> RenameState | | defineDataPrim :: TokenId -> NewType -> Int -> RenameMonad Id | | defineData :: Maybe Bool -> TokenId -> NewType -> [Id] -> RenameMonad Id | | defineMethod :: Pos -> TokenId -> NewType -> Int -> Id -> TokenId -> RenameMonad Id | | defineConstr :: TokenId -> TokenId -> NewType -> [Maybe Id] -> Id -> RenameMonad Id | | defineField :: TokenId -> Id -> Id -> ((Maybe (Pos, TokenId, c), b), Int) -> (a, b1, TokenId -> IdKind -> IE, TokenId -> (InfixClass TokenId, Int)) -> RenameState -> (Maybe (Pos, Id, Id), RenameState) | | localTid :: PackedString -> Id -> TokenId -> TokenId | | globalTid :: PackedString -> Id -> TokenId -> TokenId | | defineVar :: TokenId -> RenameMonad Id | | defineDefaultMethod :: TokenId -> RenameMonad Id | | defineInstMethod :: TokenId -> RenameMonad Id | | defineDerived :: Id -> [(Pos, Id)] -> a -> RenameState -> RenameState | | strAT :: Ord a => Map a Info -> a -> String | | data ImportState | | data NT | | data NewType | | data IE | | data Info | | data Flags |
|
|
Documentation |
|
data RenameState |
Should be a record ... but should its field names be exported?
| Constructors | | Instances | |
|
|
type RenameToken = (PackedString -> Id -> TokenId -> TokenId, TokenId -> TokenId, TokenId -> IdKind -> IE, TokenId -> (InfixClass TokenId, Int)) |
|
type RenameToken2 = (PackedString -> Id -> TokenId -> TokenId, TokenId -> TokenId, TokenId -> IdKind -> IE) |
|
type RenameMonad a = State RenameToken RenameState a RenameState |
|
type RenameRMonad a b = State a RenameState b RenameState |
|
type RenameMonadEmpty = State0 RenameToken RenameState RenameState |
|
type RenameRMonadEmpty a = State0 a RenameState RenameState |
|
keepRS :: RenameState -> (Id, ((TokenId, IdKind) -> Id, (TokenId, IdKind) -> Maybe Id), (Id, PackedString), Map Id Info, [(Id, [(Pos, Id)])], Maybe [Id], [Error]) |
Destruct rename state to obtain all its elements we are interested in.
Additionally checks some properties of types.
|
|
thisModule :: PackedString -> TokenId -> Bool |
Only important that it works for data, class, type and newtype
|
|
is2rs :: Flags -> PackedString -> (TokenId -> [TokenId]) -> ((TokenId -> Bool) -> a) -> Overlap -> ImportState -> Either [Error] (TokenId -> TokenId, a, RenameState, Map (TokenId, IdKind) (Either [Pos] [Id])) |
Basically transform the importState into a renameState
|
|
fixFixityRS :: (TokenId -> (InfixClass TokenId, Int)) -> RenameState -> [(InfixClass TokenId, Int, [FixId TokenId])] -> (TokenId -> (InfixClass TokenId, Int), RenameState) |
|
getSymbolTableRS :: RenameState -> Map Id Info |
|
getErrorsRS :: RenameState -> (RenameState, [Error]) |
|
pushScope :: a -> RenameState -> RenameState |
|
popScope :: a -> (b, RenameState) -> (b, RenameState) |
|
renameError :: Error -> a -> RenameMonad a |
|
lookupAll :: [Map (TokenId, IdKind) Id] -> (TokenId, IdKind) -> Maybe Id |
Looks up identifier (given as token,kind) in list of trees.
Returns first entry found.
|
|
uniqueTid :: Pos -> IdKind -> TokenId -> RenameMonad Id |
Looks up id in rename table for identifier given through its kind and token.
If no entry exists, new id is created but appropriate error message added to
rename state.
|
|
fixTid :: IdKind -> TokenId -> RenameMonad (InfixClass TokenId, Int) |
|
bindTid :: Pos -> IdKind -> TokenId -> a -> RenameState -> RenameState |
Adds the the given identifier (position, kind of id, token with name)
to the active names in renameState.
Adds error to renameState, if identifier is already an active name,
that is, redefinition occurred.
|
|
bindNK :: Pos -> RenameMonad TokenId |
|
checkPuns :: Pos -> t -> RenameState -> RenameState |
|
checkTid :: Pos -> IdKind -> TokenId -> RenameRMonad a Bool |
Checks if given identifier (kind, token) is already known as active name.
It is used to check if a field have already been included in the bindings
|
|
transTypes :: [(TokenId, Id)] -> [Id] -> [Context TokenId] -> [Type TokenId] -> RenameMonad NewType |
This function makes use of the ability of NewType to contain several types.
|
|
transTVar :: Pos -> [(TokenId, Id)] -> TokenId -> RenameMonad NT |
|
uniqueTVar :: (Eq a, Show a) => Pos -> [(a, Id)] -> a -> RenameMonad Id |
|
transContext :: [(TokenId, Id)] -> Context TokenId -> RenameMonad (Id, Id) |
|
transType :: [(TokenId, Id)] -> Type TokenId -> RenameMonad NT |
|
defineDefault :: [Type Id] -> a -> RenameState -> RenameState |
Adds list of default types to RenameState.
Checks for illegal types and redefinition,
extending error messages appropriately.
|
|
defineType |
:: TokenId | type synonym
| -> NewType | the type it is defined to denote
| -> RenameMonad Id | id of the type synonym
| Add a type synonym to symboltable. (It must be already in renaming table.)
|
|
|
defineClass |
:: Pos | | -> TokenId | | -> NewType | pseudo type built from class and type variable
(type of dictionary?)
| -> [(Id, Id)] | (type info for method, default info for method)
| -> RenameToken | | -> RenameState | | -> RenameState | | Add a class to symboltable.
(It must be already in renaming table.)
Also checks for duplicate predicates in context (=> extend error messages)
|
|
|
defineDataPrim :: TokenId -> NewType -> Int -> RenameMonad Id |
|
defineData |
:: Maybe Bool | Nothing: newtype, Just False: data unboxed,
Just True: data (boxed)
| -> TokenId | type constructor
| -> NewType | defined type (coded with type variables)
| -> [Id] | data constructors
| -> RenameMonad Id | | Add entry for data or newtype declaration to symboltable.
|
|
|
defineMethod |
:: Pos | position of type declaration
| -> TokenId | method id
| -> NewType | method type
| -> Int | method arity
| -> Id | class to which method belongs
| -> TokenId | class name
| -> RenameMonad Id | | Add entry for type declaration of given method to symboltable.
Return identifier for this entry.
|
|
|
defineConstr :: TokenId -> TokenId -> NewType -> [Maybe Id] -> Id -> RenameMonad Id |
|
defineField :: TokenId -> Id -> Id -> ((Maybe (Pos, TokenId, c), b), Int) -> (a, b1, TokenId -> IdKind -> IE, TokenId -> (InfixClass TokenId, Int)) -> RenameState -> (Maybe (Pos, Id, Id), RenameState) |
|
localTid :: PackedString -> Id -> TokenId -> TokenId |
Creates token for instance methods for tuple type?
Another nonsensicle application of tuple tokens...
gone wierd
|
|
globalTid :: PackedString -> Id -> TokenId -> TokenId |
if token is not qualified make it qualified with given module name
|
|
defineVar :: TokenId -> RenameMonad Id |
|
defineDefaultMethod :: TokenId -> RenameMonad Id |
|
defineInstMethod :: TokenId -> RenameMonad Id |
|
defineDerived :: Id -> [(Pos, Id)] -> a -> RenameState -> RenameState |
|
strAT :: Ord a => Map a Info -> a -> String |
|
data ImportState |
It is probably best to refrain from direct access to the fields...
| Instances | |
|
|
data NT |
Instances | |
|
|
data NewType |
Perhaps NewType is a type schema? It quantifies variables over
an arrow of NTs.
| Instances | |
|
|
data IE |
This is Interface Exports
defined in a lattice IEall
/ \
| IEsome
IEsel |
| IEabs
\ /
IEnone
IEall -> exported (with all constructors/fields/methods)
IEsome -> exported with selected constructors/fields/methods
IEabs -> exported abstractly (without constructors/fields/methods)
IEnone -> not exported
IEsel -> selected constructors/fields/methods
(is exported, despite defn below!)
| Instances | |
|
|
data Info |
Given all the selector functions below, shouldn't these
constructors be record constructors? -SamB
| Instances | |
|
|
data Flags |
Instances | |
|
|
Produced by Haddock version 0.8 |