module RefsTypes(module RefsTypes,Pos(..),sameModuleName,noModule) where import HsName(ModuleName,sameModuleName,noModule) import HsLexerPos(Pos(..)) import SrcLoc(SrcLoc) {-+ The cross reference information was once written to files by #tstModules# and then read by #hs2html#. That is why there were #Show# and #Read# instances, and why the constructor names are short.

Since hs2html has been integrated into pfe now, these types are rather obsolete... -} --data SP = T | V deriving (Read) data T = V | Co Name {-Ref-} | Me Name {-Ref-} | Fi Name {-Ref-} | T | Cl deriving (Eq,Show,Read) data R = DT | DL | DC | DI | DP | U | Ex | Im deriving ({-Show,Read,-}Eq) type Module = ModuleName type Name = String --type Pos = (Int,Int) -- (line,column) type SrcPos = (FilePath,Pos) -- better to keep SrcLoc? type Global = (Module,Name) type Local = SrcPos type Ref = Either Global Local type Orig = (Name,R,T,[(T,Ref)]) type Refs = [(Pos,Orig)] isDef U = False isDef DI = False isDef Ex = False isDef Im = False isDef _ = True isType Cl = True isType T = True isType _ = False shPos p = show (line p)++":"++show (column p) shPos' p = show (line p)++"."++show (column p) -- Merge a sorted list of reference info with a list of lexical tokens -- (Designed to be lazy in the reference list) merge rs [] = [] merge rs tts@(t@(_,(tp,_)):ts) = (t,optref):merge rs' ts where (optref,rs') = findref rs findref [] = (Nothing,[]) findref rrs@((rp,ref):rs) = case compare rp tp of LT -> findref rs EQ -> (Just ref,rs) GT -> (Nothing,rrs) {- -- Strict merge (only marginally faster, it seems): merge' rs [] = [] merge' [] ts = map (flip (,) Nothing) ts merge' rrs@(r@(rp,ref):rs) tts@(t@(_,(tp,_)):ts) = case compare rp tp of LT -> merge' rs tts EQ -> (t,Just ref):merge' rs ts GT -> (t,Nothing):merge' rrs ts -}