RefsTypes.hs

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
-}

Plain-text version of RefsTypes.hs | Valid HTML?