diff options
Diffstat (limited to 'haddock-api/src/Haddock/Backends')
| -rw-r--r-- | haddock-api/src/Haddock/Backends/HaddockDB.hs | 15 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Backends/Hoogle.hs | 2 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Backends/LaTeX.hs | 16 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Backends/Xhtml/Decl.hs | 39 | 
4 files changed, 47 insertions, 25 deletions
| diff --git a/haddock-api/src/Haddock/Backends/HaddockDB.hs b/haddock-api/src/Haddock/Backends/HaddockDB.hs index 0bdc9057..6c48804a 100644 --- a/haddock-api/src/Haddock/Backends/HaddockDB.hs +++ b/haddock-api/src/Haddock/Backends/HaddockDB.hs @@ -104,17 +104,22 @@ ppHsContext context = parenList (map (\ (a,b) -> ppHsQName a <+>  					 hsep (map ppHsAType b)) context)  ppHsType :: HsType -> Doc -ppHsType (HsForAllType Nothing context htype) = +ppHsType (HsForAllType _ Nothing context htype) =       hsep [ ppHsContext context, text "=>", ppHsType htype] -ppHsType (HsForAllType (Just tvs) [] htype) = -     hsep (text "forall" : map ppHsName tvs ++ text "." : [ppHsType htype]) -ppHsType (HsForAllType (Just tvs) context htype) = -     hsep (text "forall" : map ppHsName tvs ++ text "." : +ppHsType (HsForAllType fvf (Just tvs) [] htype) = +     hsep (text "forall" : map ppHsName tvs ++ pprHsForAllSeparator fvf : +       [ppHsType htype]) +ppHsType (HsForAllType fvf (Just tvs) context htype) = +     hsep (text "forall" : map ppHsName tvs ++ pprHsForAllSeparator fvf :  	   ppHsContext context : text "=>" : [ppHsType htype])  ppHsType (HsTyFun a b) = fsep [ppHsBType a, text "->", ppHsType b]  ppHsType (HsTyIP n t)  = fsep [(char '?' <> ppHsName n), text "::", ppHsType t]  ppHsType t = ppHsBType t +ppHsForAllSeparator :: ForallVisFlag -> Doc +ppHsForAllSeparator ForallVis   = text "->" +ppHsForAllSeparator ForallInvis = text "." +  ppHsBType (HsTyApp (HsTyCon (Qual (Module "Prelude") (HsTyClsName (HsSpecial "[]")))) b )    = brackets $ ppHsType b  ppHsBType (HsTyApp a b) = fsep [ppHsBType a, ppHsAType b] diff --git a/haddock-api/src/Haddock/Backends/Hoogle.hs b/haddock-api/src/Haddock/Backends/Hoogle.hs index 9e3186e5..6aac2f08 100644 --- a/haddock-api/src/Haddock/Backends/Hoogle.hs +++ b/haddock-api/src/Haddock/Backends/Hoogle.hs @@ -72,7 +72,7 @@ dropHsDocTy :: HsType a -> HsType a  dropHsDocTy = f      where          g (L src x) = L src (f x) -        f (HsForAllTy x a e) = HsForAllTy x a (g e) +        f (HsForAllTy x fvf a e) = HsForAllTy x fvf a (g e)          f (HsQualTy x a e) = HsQualTy x a (g e)          f (HsBangTy x a b) = HsBangTy x a (g b)          f (HsAppTy x a b) = HsAppTy x (g a) (g b) diff --git a/haddock-api/src/Haddock/Backends/LaTeX.hs b/haddock-api/src/Haddock/Backends/LaTeX.hs index dc083024..9e2e52c3 100644 --- a/haddock-api/src/Haddock/Backends/LaTeX.hs +++ b/haddock-api/src/Haddock/Backends/LaTeX.hs @@ -477,9 +477,10 @@ ppSubSigLike unicode typ argDocs subdocs leader = do_args 0 leader typ      arg_doc n = rDoc . fmap _doc $ Map.lookup n argDocs      do_args :: Int -> LaTeX -> HsType DocNameI -> [(LaTeX, LaTeX)] -    do_args _n leader (HsForAllTy _ tvs ltype) +    do_args _n leader (HsForAllTy _ fvf tvs ltype)        = [ ( decltt leader -          , decltt (hsep (forallSymbol unicode : ppTyVars tvs ++ [dot])) +          , decltt (hsep (forallSymbol unicode : ppTyVars tvs ++ +                          [ppForAllSeparator unicode fvf]))                <+> ppLType unicode ltype            ) ]      do_args n leader (HsQualTy _ lctxt ltype) @@ -508,6 +509,12 @@ ppSubSigLike unicode typ argDocs subdocs leader = do_args 0 leader typ      gadtOpen = text "\\{" +ppForAllSeparator :: Bool -> ForallVisFlag -> LaTeX +ppForAllSeparator unicode fvf = +  case fvf of +    ForallVis   -> text "\\ " <> arrow unicode +    ForallInvis -> dot +  ppTypeSig :: [Name] -> HsType DocNameI  -> Bool -> LaTeX  ppTypeSig nms ty unicode =    hsep (punctuate comma $ map ppSymName nms) @@ -1028,8 +1035,9 @@ ppr_mono_lty ty unicode = ppr_mono_ty (unLoc ty) unicode  ppr_mono_ty :: HsType DocNameI -> Bool -> LaTeX -ppr_mono_ty (HsForAllTy _ tvs ty) unicode -  = sep [ hsep (forallSymbol unicode : ppTyVars tvs) <> dot +ppr_mono_ty (HsForAllTy _ fvf tvs ty) unicode +  = sep [ hsep (forallSymbol unicode : ppTyVars tvs) <> +            ppForAllSeparator unicode fvf          , ppr_mono_lty ty unicode ]  ppr_mono_ty (HsQualTy _ ctxt ty) unicode    = sep [ ppLContext ctxt unicode diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs index 238c584f..1a0db153 100644 --- a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs +++ b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs @@ -151,10 +151,10 @@ ppSubSigLike unicode qual typ argDocs subdocs sep emptyCtxts = do_args 0 sep typ      do_largs n leader (L _ t) = do_args n leader t      do_args :: Int -> Html -> HsType DocNameI -> [SubDecl] -    do_args n leader (HsForAllTy _ tvs ltype) +    do_args n leader (HsForAllTy _ fvf tvs ltype)        = do_largs n leader' ltype        where -        leader' = leader <+> ppForAll tvs unicode qual +        leader' = leader <+> ppForAll tvs unicode qual fvf      do_args n leader (HsQualTy _ lctxt ltype)        | null (unLoc lctxt) @@ -189,14 +189,21 @@ ppSubSigLike unicode qual typ argDocs subdocs sep emptyCtxts = do_args 0 sep typ -ppForAll :: [LHsTyVarBndr DocNameI] -> Unicode -> Qualification -> Html -ppForAll tvs unicode qual = +ppForAll :: [LHsTyVarBndr DocNameI] -> Unicode -> Qualification -> ForallVisFlag +         -> Html +ppForAll tvs unicode qual fvf =    case [ppKTv n k | L _ (KindedTyVar _ (L _ n) k) <- tvs] of      [] -> noHtml -    ts -> forallSymbol unicode <+> hsep ts +++ dot +    ts -> forallSymbol unicode <+> hsep ts +++ ppForAllSeparator unicode fvf    where ppKTv n k = parens $            ppTyName (getName n) <+> dcolon unicode <+> ppLKind unicode qual k +ppForAllSeparator :: Unicode -> ForallVisFlag -> Html +ppForAllSeparator unicode fvf = +  case fvf of +    ForallVis   -> spaceHtml +++ arrow unicode +    ForallInvis -> dot +  ppFixities :: [(DocName, Fixity)] -> Qualification -> Html  ppFixities [] _ = noHtml  ppFixities fs qual = foldr1 (+++) (map ppFix uniq_fs) +++ rightEdge @@ -1133,16 +1140,16 @@ patSigContext typ | hasNonEmptyContext typ && isFirstContextEmpty typ =  ShowEmp      hasNonEmptyContext :: LHsType name -> Bool      hasNonEmptyContext t =        case unLoc t of -        HsForAllTy _ _ s -> hasNonEmptyContext s -        HsQualTy _ cxt s -> if null (unLoc cxt) then hasNonEmptyContext s else True -        HsFunTy _ _ s    -> hasNonEmptyContext s +        HsForAllTy _ _ _ s -> hasNonEmptyContext s +        HsQualTy _ cxt s   -> if null (unLoc cxt) then hasNonEmptyContext s else True +        HsFunTy _ _ s      -> hasNonEmptyContext s          _ -> False      isFirstContextEmpty :: LHsType name -> Bool      isFirstContextEmpty t =        case unLoc t of -        HsForAllTy _ _ s -> isFirstContextEmpty s -        HsQualTy _ cxt _ -> null (unLoc cxt) -        HsFunTy _ _ s    -> isFirstContextEmpty s +        HsForAllTy _ _ _ s -> isFirstContextEmpty s +        HsQualTy _ cxt _   -> null (unLoc cxt) +        HsFunTy _ _ s      -> isFirstContextEmpty s          _ -> False @@ -1152,16 +1159,18 @@ ppPatSigType :: Unicode -> Qualification -> LHsType DocNameI -> Html  ppPatSigType unicode qual typ =    let emptyCtxts = patSigContext typ in ppLType unicode qual emptyCtxts typ -ppForAllPart :: Unicode -> Qualification -> [LHsTyVarBndr DocNameI] -> Html -ppForAllPart unicode qual tvs = hsep (forallSymbol unicode : ppTyVars unicode qual tvs) +++ dot +ppForAllPart :: Unicode -> Qualification -> ForallVisFlag -> [LHsTyVarBndr DocNameI] -> Html +ppForAllPart unicode qual fvf tvs = +  hsep (forallSymbol unicode : ppTyVars unicode qual tvs) +++ +  ppForAllSeparator unicode fvf  ppr_mono_lty :: LHsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html  ppr_mono_lty ty = ppr_mono_ty (unLoc ty)  ppr_mono_ty :: HsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html -ppr_mono_ty (HsForAllTy _ tvs ty) unicode qual emptyCtxts -  = ppForAllPart unicode qual tvs <+> ppr_mono_lty ty unicode qual emptyCtxts +ppr_mono_ty (HsForAllTy _ fvf tvs ty) unicode qual emptyCtxts +  = ppForAllPart unicode qual fvf tvs <+> ppr_mono_lty ty unicode qual emptyCtxts  ppr_mono_ty (HsQualTy _ ctxt ty) unicode qual emptyCtxts    = ppLContext ctxt unicode qual emptyCtxts <+> ppr_mono_lty ty unicode qual emptyCtxts | 
