More compact Outputable instance for `Uniq(D)Set`
authorSebastian Graf <sebastian.graf@kit.edu>
Sat, 17 Nov 2018 11:31:29 +0000 (12:31 +0100)
committerKrzysztof Gogolewski <krz.gogolewski@gmail.com>
Sat, 17 Nov 2018 12:52:26 +0000 (13:52 +0100)
Summary:
Until now, `UniqSet` and `UniqDSet` inherited their `Outputable`
instances from `UniqFM` and `UniqDFM`.

That made for verbose and redundant output. This patch rectifies
that by pretty-printing these sets in common math notation.
E.g., previously, we would render `UniqSet`s like this:

    [s2fE :-> x_s2fE, s2fF :-> y_s2fF, s2fG :-> z_s2fG, s2fH :-> g_s2fH]

Now, they're are printed like this:

    {x_s2fE, y_s2fF, z_s2fG, g_s2fH}

Reviewers: simonpj, bgamari, AndreasK, dfeuer, osa1

Reviewed By: osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #15879

Differential Revision: https://phabricator.haskell.org/D5315

compiler/utils/UniqDSet.hs
compiler/utils/UniqSet.hs

index 4be437c..92d924e 100644 (file)
@@ -133,4 +133,4 @@ instance Outputable a => Outputable (UniqDSet a) where
   ppr = pprUniqDSet ppr
 
 pprUniqDSet :: (a -> SDoc) -> UniqDSet a -> SDoc
-pprUniqDSet f (UniqDSet s) = pprUniqDFM f s
+pprUniqDSet f = braces . pprWithCommas f . uniqDSetToList
index be600a0..82b5e9f 100644 (file)
@@ -191,4 +191,6 @@ instance Outputable a => Outputable (UniqSet a) where
     ppr = pprUniqSet ppr
 
 pprUniqSet :: (a -> SDoc) -> UniqSet a -> SDoc
-pprUniqSet f (UniqSet s) = pprUniqFM f s
+-- It's OK to use nonDetUFMToList here because we only use it for
+-- pretty-printing.
+pprUniqSet f = braces . pprWithCommas f . nonDetEltsUniqSet