diff options
Diffstat (limited to 'src/HaddockUtil.hs')
| -rw-r--r-- | src/HaddockUtil.hs | 46 | 
1 files changed, 41 insertions, 5 deletions
diff --git a/src/HaddockUtil.hs b/src/HaddockUtil.hs index 0c458049..d4c495a3 100644 --- a/src/HaddockUtil.hs +++ b/src/HaddockUtil.hs @@ -25,11 +25,11 @@ module HaddockUtil (    html_xrefs_ref,   ) where -import Binary -import HaddockLex -import HaddockParse +import Binary2 +import HaddockLex2 +import HaddockParse2  import HaddockTypes -import HsSyn +import HsSyn2  import Map ( Map )  import qualified Map hiding ( Map ) @@ -142,6 +142,42 @@ addConDocs (x:xs) doc = addConDoc x doc : xs  -- ---------------------------------------------------------------------------  -- Making abstract declarations +restrictTo :: [GHC.Name] -> (GHC.HsDecl GHC.Name) -> (GHC.HsDecl GHC.Name) +restrictTo names decl = case decl of +  TyClD d | isDataDecl d && tcdND d == DataType ->  +    TyClD (d { tcdCons = restrictCons names (tcdCons d) } +  TyClD d | isDataDecl d && tcdND d == NewType ->  +   case restrictCons names (tcdCons d) of +      []    -> TyClD (d { tcdND = DataType, tcdCons = [] }) +      [con] -> TyClD (d { tcdCons = con }) +  TyClD d | isClassDecl d ->  +    TyClD (d { tcdSigs = restrictDecls names (tcdSigs d) })    +  _ -> decl +    +restrictCons :: [GHC.Name] -> [GHC.LConDecl GHC.Name] -> [GHC.LConDecl GHC.Name] +restrictCons names decls = [ d | Just d <- map keep decls ]   +  where keep d | con_name (unLoc d) `elem` names =  +          case con_details d of +            PrefixCon _ -> Just d +            RecCon fields  +              | all field_avail fields -> Just d +              | otherwise = Just (d { con_details = PrefixCon field_types }) +       		-- if we have *all* the field names available, then +		-- keep the record declaration.  Otherwise degrade to +		-- a constructor declaration.  This isn't quite right, but +		-- it's the best we can do. +	   where +            field_avail (HsRecField n _ _) = (unLoc n) `elem` names +            field_types = [ ty | HsRecField n ty _ <- fields]  +        keep d | otherwise = Nothing + +restrictDecls :: [GHC.Name] -> [GHC.LSig GHC.Name] -> [GHC.LSig GHC.Name] +restrictDecls names decls = filter keep decls +  where keep d = sigName d `elem` names +         +	-- ToDo: not really correct + +{-  restrictTo :: [HsName] -> HsDecl -> HsDecl  restrictTo names decl = case decl of       HsDataDecl loc ctxt n xs cons drv doc ->  @@ -177,7 +213,7 @@ restrictDecls :: [HsName] -> [HsDecl] -> [HsDecl]  restrictDecls names decls = filter keep decls    where keep d = not (null (declBinders d `intersect` names))  	-- ToDo: not really correct - +-}  -- -----------------------------------------------------------------------------  -- Extract documentation from a declaration  | 
