diff options
author | Niklas Haas <git@nand.wakku.to> | 2014-03-09 16:32:36 +0100 |
---|---|---|
committer | Niklas Haas <git@nand.wakku.to> | 2014-03-09 20:02:43 +0100 |
commit | 68a78932b5b004945f6681bd51e8080e868fc0ee (patch) | |
tree | 3af2075de738def477a2e9a0fe22c2f9beeca69a | |
parent | 003f11795e4413abae5275e8a855765c571ccab9 (diff) |
Group similar fixities together
Identical fixities declared for the same line should now render using
syntax like: infix 4 <, >=, >, <=
-rw-r--r-- | html-test/ref/Operators.html | 33 | ||||
-rw-r--r-- | html-test/src/Operators.hs | 10 | ||||
-rw-r--r-- | src/Haddock/Backends/Xhtml/Decl.hs | 13 |
3 files changed, 51 insertions, 5 deletions
diff --git a/html-test/ref/Operators.html b/html-test/ref/Operators.html index 89ebbbbf..fdc46aa6 100644 --- a/html-test/ref/Operators.html +++ b/html-test/ref/Operators.html @@ -144,7 +144,19 @@ window.onload = function () {pageLoad();setSynopsis("mini_Operators.html");}; ><li ><a href="#v:-62--62--60-" >(>><)</a + >, <a href="#v:-60--60--62-" + >(<<>)</a > :: a -> b -> ()</li + ><li + ><a href="#v:-42--42--62-" + >(**>)</a + >, <a href="#v:-60--42--42-" + >(<**)</a + >, <a href="#v:-62--42--42-" + >(>**)</a + >, <a href="#v:-42--42--60-" + >(**<)</a + > :: a -> a -> ()</li ></ul ></li ><li class="src short" @@ -345,10 +357,29 @@ window.onload = function () {pageLoad();setSynopsis("mini_Operators.html");}; ><p class="caption" >Methods</p ><p class="src" - >infixr 4 >><<br + >infixl 5 <<><br + />infixr 4 >><<br /><a name="v:-62--62--60-" class="def" >(>><)</a + >, <a name="v:-60--60--62-" class="def" + >(<<>)</a > :: a -> b -> ()</p + ><p class="src" + >infixr 8 **>, >**<br + />infixl 8 <**, **<<br + /><a name="v:-42--42--62-" class="def" + >(**>)</a + >, <a name="v:-60--42--42-" class="def" + >(<**)</a + >, <a name="v:-62--42--42-" class="def" + >(>**)</a + >, <a name="v:-42--42--60-" class="def" + >(**<)</a + > :: a -> a -> ()</p + ><div class="doc" + ><p + >Multiple fixities</p + ></div ></div ></div ><div class="top" diff --git a/html-test/src/Operators.hs b/html-test/src/Operators.hs index a2e30c18..f7b4d0ab 100644 --- a/html-test/src/Operators.hs +++ b/html-test/src/Operators.hs @@ -45,11 +45,19 @@ infix 9 ** class a ><> b where type a <>< b :: * data a ><< b - (>><) :: a -> b -> () + (>><), (<<>) :: a -> b -> () + + -- | Multiple fixities + (**>), (**<), (>**), (<**) :: a -> a -> () + infixr 1 ><> infixl 2 <>< infixl 3 ><< infixr 4 >>< +infixl 5 <<> + +infixr 8 **>, >** +infixl 8 **<, <** -- | Type synonym with fixity type (a >-< b) = a <-> b diff --git a/src/Haddock/Backends/Xhtml/Decl.hs b/src/Haddock/Backends/Xhtml/Decl.hs index 5cc86d48..42f06280 100644 --- a/src/Haddock/Backends/Xhtml/Decl.hs +++ b/src/Haddock/Backends/Xhtml/Decl.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE TransformListComp #-} ----------------------------------------------------------------------------- -- | -- Module : Haddock.Backends.Html.Decl @@ -34,6 +35,7 @@ import Data.Monoid ( mempty ) import Text.XHtml hiding ( name, title, p, quote ) import GHC +import GHC.Exts import Name @@ -158,15 +160,20 @@ ppTypeOrFunSig summary links loc docnames typ (doc, argDocs) (pref1, pref2, sep) = [(leader <+> ppType unicode qual t, argDoc n, [])] ppFixities :: [(DocName, Fixity)] -> Qualification -> Html -ppFixities fs qual = vcat $ map ppFix fs +ppFixities fs qual = vcat $ map ppFix uniq_fs where - ppFix (n, Fixity p d) = toHtml (ppDir d) <+> toHtml (show p) - <+> ppDocName qual Infix False n + ppFix (ns, p, d) = toHtml d <+> toHtml (show p) <+> ppNames ns ppDir InfixR = "infixr" ppDir InfixL = "infixl" ppDir InfixN = "infix" + ppNames = concatHtml . intersperse (stringToHtml ", ") . map (ppDocName qual Infix False) + + uniq_fs = [ (n, the p, the d') | (n, Fixity p d) <- fs + , let d' = ppDir d + , then group by Down (p,d') using groupWith ] + ppTyVars :: LHsTyVarBndrs DocName -> [Html] ppTyVars tvs = map ppTyName (tyvarNames tvs) |