From 87453c56ae000c05bb89824e5cce614996a7dfe1 Mon Sep 17 00:00:00 2001 From: David Waern Date: Thu, 24 Jul 2008 16:06:18 +0000 Subject: Drop unnecessary parenthesis in types, put in by the user We were putting in parenthesis were the user did. Let's remove this since it just clutters up the types. The types are readable anyway since we print parens around infix operators and do not rely on fixity levels. When doing this I discovered that we were relying on user parenthesis when printin types like (a `O` b) c. This patchs fixes this problem so that parenthesis are always inserted around an infix op application in case it is applied to further arguments, or if it's an arguments to a type constructor. Tests are updated. --- src/Haddock/Backends/Html.hs | 18 +++++++++--------- tests/output/Test.html | 20 ++++++++++---------- tests/output/Test.html.ref | 20 ++++++++++---------- tests/tests/Test.html.ref | 20 ++++++++++---------- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/Haddock/Backends/Html.hs b/src/Haddock/Backends/Html.hs index df03acae..81cae215 100644 --- a/src/Haddock/Backends/Html.hs +++ b/src/Haddock/Backends/Html.hs @@ -1336,10 +1336,13 @@ ppType t = case t of HsSpliceTy _ -> error "ppType" HsDocTy t _ -> ppLType t -} + + -------------------------------------------------------------------------------- -- Rendering of HsType -------------------------------------------------------------------------------- + pREC_TOP = (0 :: Int) -- type in ParseIface.y in GHC pREC_FUN = (1 :: Int) -- btype in ParseIface.y in GHC -- Used for LH arg of (->) @@ -1366,16 +1369,12 @@ ppLType = ppType . unLoc ppLParendType = ppParendType . unLoc -ppType ty = ppr_mono_ty pREC_TOP (prepare ty) +ppType ty = ppr_mono_ty pREC_TOP ty ppParendType ty = ppr_mono_ty pREC_CON ty --- Before printing a type --- (a) Remove outermost HsParTy parens --- (b) Drop top-level for-all type variables in user style --- since they are implicit in Haskell -prepare (HsParTy ty) = prepare (unLoc ty) -prepare ty = ty +-- Drop top-level for-all type variables in user style +-- since they are implicit in Haskell ppForAll exp tvs cxt | show_forall = forall_part <+> ppLContext cxt @@ -1408,14 +1407,15 @@ ppr_mono_ty ctxt_prec (HsAppTy fun_ty arg_ty) hsep [ppr_mono_lty pREC_FUN fun_ty, ppr_mono_lty pREC_CON arg_ty] ppr_mono_ty ctxt_prec (HsOpTy ty1 op ty2) - = maybeParen ctxt_prec pREC_OP $ + = maybeParen ctxt_prec pREC_FUN $ ppr_mono_lty pREC_OP ty1 <+> ppr_op <+> ppr_mono_lty pREC_OP ty2 where ppr_op = if not (isSymOcc occName) then quote (ppLDocName op) else ppLDocName op occName = docNameOcc . unLoc $ op ppr_mono_ty ctxt_prec (HsParTy ty) - = parens (ppr_mono_lty pREC_TOP ty) +-- = parens (ppr_mono_lty pREC_TOP ty) + = ppr_mono_lty ctxt_prec ty ppr_mono_ty ctxt_prec (HsDocTy ty doc) = ppr_mono_lty ctxt_prec ty diff --git a/tests/output/Test.html b/tests/output/Test.html index a587a574..8cbce763 100644 --- a/tests/output/Test.html +++ b/tests/output/Test.html @@ -596,13 +596,13 @@ >t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()T () () -> T2 Int Int -> Int Int -> (T3 Bool Bool -> T4 Float Float -> Float Float) -> T5 () () -> IO ()t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()T () () -> T2 Int Int -> Int Int -> (T3 Bool Bool -> T4 Float Float -> Float Float) -> T5 () () -> IO ()t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()T () () -> T2 Int Int -> Int Int -> (T3 Bool Bool -> T4 Float Float -> Float Float) -> T5 () () -> IO ()t :: T1 -> ( :: T1 -> T2 Int Int) -> ( Int Int -> T3 Bool Bool) -> ( Bool Bool -> T4 Float Float) -> Float Float -> T5 () ()