BinderDavid pushed to branch wip/clc-proposal-442 at Glasgow Haskell Compiler / GHC

Commits:

25 changed files:

Changes:

  • changelog.d/26610
    1
    +section: compiler
    
    2
    +synopsis: Fix instance resolution for shadowed modules
    
    3
    +description:
    
    4
    +  Instances imported from modules with the same module name as the importing module
    
    5
    +  were dropped accidentally since we didn't account for the unit id of the imported module.
    
    6
    +mrs: !16648
    
    7
    +issues: #26610

  • changelog.d/clc-442
    1
    +section: base
    
    2
    +issues: #27849
    
    3
    +mrs: !16718
    
    4
    +synopsis:
    
    5
    +  Expose `data Unit` and `data TupleN` from `Data.Tuple` in `base`
    
    6
    +description:
    
    7
    +  The data types `data Unit` and `data TupleN` (for N from 2 to 64) are now exported from
    
    8
    +  `Data.Tuple` in the `base` library instead of `Data.Tuple.Experimental` in `ghc-experimental`.
    
    9
    +  See `CLC proposal 442 <https://github.com/haskell/core-libraries-committee/issues/442>`_.

  • compiler/GHC/Driver/Env.hs
    ... ... @@ -263,13 +263,13 @@ hugCompleteSigsBelow hsc uid mn = foldr (++) [] <$>
    263 263
     -- | Find instances visible from the given set of imports
    
    264 264
     hugInstancesBelow :: HscEnv -> UnitId -> ModuleNameWithIsBoot -> IO (InstEnv, [FamInst])
    
    265 265
     hugInstancesBelow hsc_env uid mnwib = do
    
    266
    - let mn = gwib_mod mnwib
    
    266
    + let mn = mkModule uid (gwib_mod mnwib)
    
    267 267
      (insts, famInsts) <-
    
    268 268
          unzip . concat <$>
    
    269 269
            hugSomeThingsBelowUs (\mod_info ->
    
    270 270
                                       let details = hm_details mod_info
    
    271 271
                                       -- Don't include instances for the current module
    
    272
    -                                  in if moduleName (mi_module (hm_iface mod_info)) == mn
    
    272
    +                                  in if fmap toUnitId (mi_module (hm_iface mod_info)) == mn
    
    273 273
                                            then []
    
    274 274
                                            else [(md_insts details, md_fam_insts details)])
    
    275 275
                               True -- Include -hi-boot
    

  • libraries/base/changelog.md
    ... ... @@ -7,6 +7,7 @@
    7 7
       * Add `Data.List.NonEmpty.{zip{3..7},zipWith{3..7},unzip{3..7}}` ([CLC proposal #409)(https://github.com/haskell/core-libraries-committee/issues/409))
    
    8 8
       * Ensure that `Data.List.elem` and `notElem` can be specialized even when no list fusion happens. ([CLC proposal #412)(https://github.com/haskell/core-libraries-committee/issues/412))
    
    9 9
       * Introduce `Data.Double` and `Data.Float` modules. ([CLC proposal #378](https://github.com/haskell/core-libraries-committee/issues/378))
    
    10
    +  * Expose `data Unit` and `data TupleN` (for `N` from 2 to 64) from module `Data.Tuple` ([CLC proposal #442](https://github.com/haskell/core-libraries-committee/issues/442))
    
    10 11
       * Change `Generically a`'s `Monoid` definition to require a `Semigroup` constraint, and define its `mconcat` using `(<>)` from that constraint. ([CLC proposal #413](https://github.com/haskell/core-libraries-committee/issues/413))
    
    11 12
       * Add `withEmptyCallStack` to `GHC.Stack`. ([CLC proposal #428](https://github.com/haskell/core-libraries-committee/issues/428))
    
    12 13
       * Add new `Data.RealFloat` module re-exporting `RealFloat` from `GHC.Float` ([CLC proposal #394](https://github.com/haskell/core-libraries-committee/issues/394))
    

  • libraries/base/src/Data/Tuple.hs
    ... ... @@ -14,13 +14,78 @@
    14 14
     --
    
    15 15
     
    
    16 16
     module Data.Tuple
    
    17
    -    (Solo(..),
    
    17
    +    (Unit(..),
    
    18
    +     Solo(..),
    
    18 19
          getSolo,
    
    19 20
          fst,
    
    20 21
          snd,
    
    21 22
          curry,
    
    22 23
          uncurry,
    
    23
    -     swap
    
    24
    +     swap,
    
    25
    +     Tuple2(..),
    
    26
    +     Tuple3(..),
    
    27
    +     Tuple4(..),
    
    28
    +     Tuple5(..),
    
    29
    +     Tuple6(..),
    
    30
    +     Tuple7(..),
    
    31
    +     Tuple8(..),
    
    32
    +     Tuple9(..),
    
    33
    +     Tuple10(..),
    
    34
    +     Tuple11(..),
    
    35
    +     Tuple12(..),
    
    36
    +     Tuple13(..),
    
    37
    +     Tuple14(..),
    
    38
    +     Tuple15(..),
    
    39
    +     Tuple16(..),
    
    40
    +     Tuple17(..),
    
    41
    +     Tuple18(..),
    
    42
    +     Tuple19(..),
    
    43
    +     Tuple20(..),
    
    44
    +     Tuple21(..),
    
    45
    +     Tuple22(..),
    
    46
    +     Tuple23(..),
    
    47
    +     Tuple24(..),
    
    48
    +     Tuple25(..),
    
    49
    +     Tuple26(..),
    
    50
    +     Tuple27(..),
    
    51
    +     Tuple28(..),
    
    52
    +     Tuple29(..),
    
    53
    +     Tuple30(..),
    
    54
    +     Tuple31(..),
    
    55
    +     Tuple32(..),
    
    56
    +     Tuple33(..),
    
    57
    +     Tuple34(..),
    
    58
    +     Tuple35(..),
    
    59
    +     Tuple36(..),
    
    60
    +     Tuple37(..),
    
    61
    +     Tuple38(..),
    
    62
    +     Tuple39(..),
    
    63
    +     Tuple40(..),
    
    64
    +     Tuple41(..),
    
    65
    +     Tuple42(..),
    
    66
    +     Tuple43(..),
    
    67
    +     Tuple44(..),
    
    68
    +     Tuple45(..),
    
    69
    +     Tuple46(..),
    
    70
    +     Tuple47(..),
    
    71
    +     Tuple48(..),
    
    72
    +     Tuple49(..),
    
    73
    +     Tuple50(..),
    
    74
    +     Tuple51(..),
    
    75
    +     Tuple52(..),
    
    76
    +     Tuple53(..),
    
    77
    +     Tuple54(..),
    
    78
    +     Tuple55(..),
    
    79
    +     Tuple56(..),
    
    80
    +     Tuple57(..),
    
    81
    +     Tuple58(..),
    
    82
    +     Tuple59(..),
    
    83
    +     Tuple60(..),
    
    84
    +     Tuple61(..),
    
    85
    +     Tuple62(..),
    
    86
    +     Tuple63(..),
    
    87
    +     Tuple64(..),
    
    24 88
          ) where
    
    25 89
     
    
    26
    -import GHC.Internal.Data.Tuple
    \ No newline at end of file
    90
    +import GHC.Internal.Data.Tuple
    
    91
    +import GHC.Tuple
    \ No newline at end of file

  • rts/include/stg/Prim.h
    ... ... @@ -59,16 +59,16 @@ StgWord hs_xchg32(StgWord x, StgWord val);
    59 59
     StgWord64 hs_xchg64(StgWord x, StgWord64 val);
    
    60 60
     
    
    61 61
     /* rts/prim/bswap.c */
    
    62
    -StgWord16 hs_bswap16(StgWord16 x);
    
    63
    -StgWord32 hs_bswap32(StgWord32 x);
    
    62
    +StgWord hs_bswap16(StgWord x);
    
    63
    +StgWord hs_bswap32(StgWord x);
    
    64 64
     StgWord64 hs_bswap64(StgWord64 x);
    
    65 65
     
    
    66 66
     /* rts/prim/bitrev.c
    
    67 67
     This was done as part of issue #16164.
    
    68 68
     See Note [Bit reversal primop] for more details about the implementation.*/
    
    69 69
     StgWord hs_bitrev8(StgWord x);
    
    70
    -StgWord16 hs_bitrev16(StgWord16 x);
    
    71
    -StgWord32 hs_bitrev32(StgWord32 x);
    
    70
    +StgWord hs_bitrev16(StgWord x);
    
    71
    +StgWord hs_bitrev32(StgWord x);
    
    72 72
     StgWord64 hs_bitrev64(StgWord64 x);
    
    73 73
     
    
    74 74
     /* rts/prim/longlong.c */
    

  • rts/prim/bitrev.c
    ... ... @@ -36,8 +36,8 @@ hs_bitrev8(StgWord x)
    36 36
       return x;
    
    37 37
     }
    
    38 38
     
    
    39
    -StgWord16
    
    40
    -hs_bitrev16(StgWord16 x)
    
    39
    +StgWord
    
    40
    +hs_bitrev16(StgWord x)
    
    41 41
     {
    
    42 42
       x = ((x >> 1) & 0x5555) | ((x & 0x5555) << 1 );
    
    43 43
       x = ((x >> 2) & 0x3333) | ((x & 0x3333) << 2 );
    
    ... ... @@ -46,14 +46,14 @@ hs_bitrev16(StgWord16 x)
    46 46
       return x;
    
    47 47
     }
    
    48 48
     
    
    49
    -StgWord32
    
    50
    -hs_bitrev32(StgWord32 x)
    
    49
    +StgWord
    
    50
    +hs_bitrev32(StgWord x)
    
    51 51
     {
    
    52
    -  x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1 );
    
    53
    -  x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2 );
    
    54
    -  x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4 );
    
    55
    -  x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8 );
    
    56
    -  x = ( x >> 16             ) | ( x << 16              );
    
    52
    +  x = ((x >> 1)  & 0x55555555) | ((x & 0x55555555) << 1 );
    
    53
    +  x = ((x >> 2)  & 0x33333333) | ((x & 0x33333333) << 2 );
    
    54
    +  x = ((x >> 4)  & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4 );
    
    55
    +  x = ((x >> 8)  & 0x00FF00FF) | ((x & 0x00FF00FF) << 8 );
    
    56
    +  x = ((x >> 16) & 0x0000FFFF) | ((x & 0x0000FFFF) << 16);
    
    57 57
       return x;
    
    58 58
     }
    
    59 59
     
    

  • rts/prim/bswap.c
    1 1
     #include "Rts.h"
    
    2 2
     
    
    3
    -StgWord16
    
    4
    -hs_bswap16(StgWord16 x)
    
    3
    +StgWord
    
    4
    +hs_bswap16(StgWord x)
    
    5 5
     {
    
    6
    -  return ((x >> 8) | (x << 8));
    
    6
    +  x = (StgWord16)x;
    
    7
    +  return (StgWord16)((x >> 8) | (x << 8));
    
    7 8
     }
    
    8 9
     
    
    9
    -StgWord32
    
    10
    -hs_bswap32(StgWord32 x)
    
    10
    +StgWord
    
    11
    +hs_bswap32(StgWord x)
    
    11 12
     {
    
    12
    -  return ((x >> 24) | ((x >> 8) & 0xff00) |
    
    13
    -          (x << 24) | ((x & 0xff00) << 8));
    
    13
    +  x = (StgWord32)x;
    
    14
    +  return (StgWord32)((x >> 24) | ((x >> 8) & 0xff00) |
    
    15
    +                     (x << 24) | ((x & 0xff00) << 8));
    
    14 16
     }
    
    15 17
     
    
    16 18
     StgWord64
    

  • testsuite/tests/ghci/prog-mhu008/Makefile
    1
    +TOP=../../..
    
    2
    +include $(TOP)/mk/boilerplate.mk
    
    3
    +include $(TOP)/mk/test.mk

  • testsuite/tests/ghci/prog-mhu008/a/M.hs
    1
    +module M (T (..)) where
    
    2
    +
    
    3
    +newtype T = MkT Int
    
    4
    +  deriving (Eq, Ord)

  • testsuite/tests/ghci/prog-mhu008/all.T
    1
    +test('prog-mhu008',
    
    2
    +     [extra_files(['a/', 'b/', 'unitA', 'unitB']),
    
    3
    +     cmd_prefix('ghciWayFlags=' + config.ghci_way_flags),
    
    4
    +     req_interp],
    
    5
    +     ghci_multiunit_script, [['unitA', 'unitB'], 'prog-mhu008.script'])

  • testsuite/tests/ghci/prog-mhu008/b/M.hs
    1
    +{-# LANGUAGE PackageImports #-}
    
    2
    +
    
    3
    +module M
    
    4
    +  ( module Export
    
    5
    +  , cmp
    
    6
    +  ) where
    
    7
    +
    
    8
    +import "a" M as Export
    
    9
    +
    
    10
    +cmp :: T -> T -> Bool
    
    11
    +cmp x y = x <= y

  • testsuite/tests/ghci/prog-mhu008/prog-mhu008.script
    1
    +:set -XPackageImports
    
    2
    +import "a" M qualified as MA
    
    3
    +import "b" M qualified as MB
    
    4
    +
    
    5
    +MB.cmp (MA.MkT 1) (MA.MkT 2)

  • testsuite/tests/ghci/prog-mhu008/prog-mhu008.stdout
    1
    +True

  • testsuite/tests/ghci/prog-mhu008/unitA
    1
    +-this-unit-id a-0-inplace
    
    2
    +-this-package-name a
    
    3
    +-i
    
    4
    +-ia
    
    5
    +M

  • testsuite/tests/ghci/prog-mhu008/unitB
    1
    +-this-unit-id b-0-inplace
    
    2
    +-this-package-name b
    
    3
    +-package-id a-0-inplace
    
    4
    +-i
    
    5
    +-ib
    
    6
    +M

  • testsuite/tests/interface-stability/base-exports.stdout
    No preview for this file type
  • testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
    No preview for this file type
  • testsuite/tests/interface-stability/base-exports.stdout-mingw32
    No preview for this file type
  • testsuite/tests/primops/should_run/T27299.hs
    1
    +{-# LANGUAGE MagicHash #-}
    
    2
    +import GHC.Exts
    
    3
    +import GHC.Word
    
    4
    +import Numeric
    
    5
    +
    
    6
    +main :: IO ()
    
    7
    +main = do
    
    8
    +  putStrLn $ showHex (W# (bitReverse8# 0x55##)) ""
    
    9
    +  putStrLn $ showHex (W# (bitReverse8# 0xAA##)) ""
    
    10
    +  putStrLn $ showHex (W# (bitReverse16# 0x5555##)) ""
    
    11
    +  putStrLn $ showHex (W# (bitReverse16# 0xAAAA##)) ""
    
    12
    +  putStrLn $ showHex (W# (bitReverse32# 0x5555_5555##)) ""
    
    13
    +  putStrLn $ showHex (W# (bitReverse32# 0xAAAA_AAAA##)) ""
    
    14
    +  putStrLn $ showHex (W# (byteSwap16# 0xABCD##)) ""
    
    15
    +  putStrLn $ showHex (W# (byteSwap32# 0xABCD_EF12##)) ""
    
    16
    +  putStrLn $ showHex (W# (noinline bitReverse8# 0x55##)) ""
    
    17
    +  putStrLn $ showHex (W# (noinline bitReverse8# 0xAA##)) ""
    
    18
    +  putStrLn $ showHex (W# (noinline bitReverse16# 0x5555##)) ""
    
    19
    +  putStrLn $ showHex (W# (noinline bitReverse16# 0xAAAA##)) ""
    
    20
    +  putStrLn $ showHex (W# (noinline bitReverse32# 0x5555_5555##)) ""
    
    21
    +  putStrLn $ showHex (W# (noinline bitReverse32# 0xAAAA_AAAA##)) ""
    
    22
    +  putStrLn $ showHex (W# (noinline byteSwap16# 0xABCD##)) ""
    
    23
    +  putStrLn $ showHex (W# (noinline byteSwap32# 0xABCD_EF12##)) ""

  • testsuite/tests/primops/should_run/T27299.stdout
    1
    +aa
    
    2
    +55
    
    3
    +aaaa
    
    4
    +5555
    
    5
    +aaaaaaaa
    
    6
    +55555555
    
    7
    +cdab
    
    8
    +12efcdab
    
    9
    +aa
    
    10
    +55
    
    11
    +aaaa
    
    12
    +5555
    
    13
    +aaaaaaaa
    
    14
    +55555555
    
    15
    +cdab
    
    16
    +12efcdab

  • testsuite/tests/primops/should_run/all.T
    ... ... @@ -91,3 +91,4 @@ test('T24496'
    91 91
           ]
    
    92 92
         , compile_and_run, ['-O'])
    
    93 93
     test('T6026', normal, compile_and_run, [''])
    
    94
    +test('T27299', normal, compile_and_run, [''])

  • testsuite/tests/typecheck/should_compile/T25180.stderr
    ... ... @@ -5,6 +5,9 @@ T25180.hs:12:8: warning: [GHC-88464] [-Wtyped-holes (in -Wdefault)]
    5 5
           Valid hole fits include
    
    6 6
             tup0 :: () (bound at T25180.hs:12:1)
    
    7 7
             () :: () (bound at <wired into compiler>)
    
    8
    +        () :: ()
    
    9
    +          (imported from ‘Data.Tuple’ at T25180.hs:6:1-17
    
    10
    +           (and originally defined in ‘GHC.Internal.Tuple’))
    
    8 11
             mempty :: forall a. Monoid a => a
    
    9 12
               with mempty @()
    
    10 13
               (imported from ‘Prelude’
    
    ... ... @@ -60,6 +63,10 @@ T25180.hs:26:8: warning: [GHC-88464] [-Wtyped-holes (in -Wdefault)]
    60 63
             (,) :: forall a b. a -> b -> (a, b)
    
    61 64
               with (,) @a @b
    
    62 65
               (bound at <wired into compiler>)
    
    66
    +        (,) :: forall a b. a -> b -> (a, b)
    
    67
    +          with (,) @a @b
    
    68
    +          (imported from ‘Data.Tuple’ at T25180.hs:6:1-17
    
    69
    +           (and originally defined in ‘GHC.Internal.Tuple’))
    
    63 70
     
    
    64 71
     T25180.hs:33:8: warning: [GHC-88464] [-Wtyped-holes (in -Wdefault)]
    
    65 72
         • Found hole: _ :: a -> b -> c -> (a, b, c)
    
    ... ... @@ -75,6 +82,10 @@ T25180.hs:33:8: warning: [GHC-88464] [-Wtyped-holes (in -Wdefault)]
    75 82
             (,,) :: forall a b c. a -> b -> c -> (a, b, c)
    
    76 83
               with (,,) @a @b @c
    
    77 84
               (bound at <wired into compiler>)
    
    85
    +        (,,) :: forall a b c. a -> b -> c -> (a, b, c)
    
    86
    +          with (,,) @a @b @c
    
    87
    +          (imported from ‘Data.Tuple’ at T25180.hs:6:1-17
    
    88
    +           (and originally defined in ‘GHC.Internal.Tuple’))
    
    78 89
     
    
    79 90
     T25180.hs:38:11: warning: [GHC-88464] [-Wtyped-holes (in -Wdefault)]
    
    80 91
         • Found hole: _ :: (# #)
    

  • utils/haddock/html-test/ref/Bug923.html
    ... ... @@ -76,7 +76,9 @@
    76 76
     		  >forall</span
    
    77 77
     		  > a. a -&gt; <a href="#" title="Bug923"
    
    78 78
     		  >T</a
    
    79
    -		  > ('(,) a :: <a href="#" title="Data.Kind"
    
    79
    +		  > ('<a href="#" title="Data.Tuple"
    
    80
    +		  >(,)</a
    
    81
    +		  > a :: <a href="#" title="Data.Kind"
    
    80 82
     		  >Type</a
    
    81 83
     		  > -&gt; (<a href="#" title="Data.Kind"
    
    82 84
     		  >Type</a
    
    ... ... @@ -126,7 +128,9 @@
    126 128
     		  >forall</span
    
    127 129
     		  > a. a -&gt; <a href="#" title="Bug923"
    
    128 130
     		  >T</a
    
    129
    -		  > ('(,) a :: <a href="#" title="Data.Kind"
    
    131
    +		  > ('<a href="#" title="Data.Tuple"
    
    132
    +		  >(,)</a
    
    133
    +		  > a :: <a href="#" title="Data.Kind"
    
    130 134
     		  >Type</a
    
    131 135
     		  > -&gt; (<a href="#" title="Data.Kind"
    
    132 136
     		  >Type</a
    
    ... ... @@ -156,7 +160,9 @@
    156 160
     		      >Eq</a
    
    157 161
     		      > (<a href="#" title="Bug923"
    
    158 162
     		      >T</a
    
    159
    -		      > ('(,) a :: <a href="#" title="Data.Kind"
    
    163
    +		      > ('<a href="#" title="Data.Tuple"
    
    164
    +		      >(,)</a
    
    165
    +		      > a :: <a href="#" title="Data.Kind"
    
    160 166
     		      >Type</a
    
    161 167
     		      > -&gt; (<a href="#" title="Data.Kind"
    
    162 168
     		      >Type</a
    
    ... ... @@ -188,7 +194,9 @@
    188 194
     			  >(==)</a
    
    189 195
     			  > :: <a href="#" title="Bug923"
    
    190 196
     			  >T</a
    
    191
    -			  > ('(,) a :: <a href="#" title="Data.Kind"
    
    197
    +			  > ('<a href="#" title="Data.Tuple"
    
    198
    +			  >(,)</a
    
    199
    +			  > a :: <a href="#" title="Data.Kind"
    
    192 200
     			  >Type</a
    
    193 201
     			  > -&gt; (<a href="#" title="Data.Kind"
    
    194 202
     			  >Type</a
    
    ... ... @@ -196,7 +204,9 @@
    196 204
     			  >Type</a
    
    197 205
     			  >)) -&gt; <a href="#" title="Bug923"
    
    198 206
     			  >T</a
    
    199
    -			  > ('(,) a :: <a href="#" title="Data.Kind"
    
    207
    +			  > ('<a href="#" title="Data.Tuple"
    
    208
    +			  >(,)</a
    
    209
    +			  > a :: <a href="#" title="Data.Kind"
    
    200 210
     			  >Type</a
    
    201 211
     			  > -&gt; (<a href="#" title="Data.Kind"
    
    202 212
     			  >Type</a
    
    ... ... @@ -212,7 +222,9 @@
    212 222
     			  >(/=)</a
    
    213 223
     			  > :: <a href="#" title="Bug923"
    
    214 224
     			  >T</a
    
    215
    -			  > ('(,) a :: <a href="#" title="Data.Kind"
    
    225
    +			  > ('<a href="#" title="Data.Tuple"
    
    226
    +			  >(,)</a
    
    227
    +			  > a :: <a href="#" title="Data.Kind"
    
    216 228
     			  >Type</a
    
    217 229
     			  > -&gt; (<a href="#" title="Data.Kind"
    
    218 230
     			  >Type</a
    
    ... ... @@ -220,7 +232,9 @@
    220 232
     			  >Type</a
    
    221 233
     			  >)) -&gt; <a href="#" title="Bug923"
    
    222 234
     			  >T</a
    
    223
    -			  > ('(,) a :: <a href="#" title="Data.Kind"
    
    235
    +			  > ('<a href="#" title="Data.Tuple"
    
    236
    +			  >(,)</a
    
    237
    +			  > a :: <a href="#" title="Data.Kind"
    
    224 238
     			  >Type</a
    
    225 239
     			  > -&gt; (<a href="#" title="Data.Kind"
    
    226 240
     			  >Type</a
    

  • utils/haddock/html-test/ref/Instances.html
    ... ... @@ -450,7 +450,9 @@
    450 450
     			>)</span
    
    451 451
     		      > =&gt; <a href="#" title="Instances"
    
    452 452
     		      >Foo</a
    
    453
    -		      > ((,) (f a))</span
    
    453
    +		      > (<a href="#" title="Data.Tuple"
    
    454
    +		      >(,)</a
    
    455
    +		      > (f a))</span
    
    454 456
     		    > <a href="#" class="selflink"
    
    455 457
     		    >#</a
    
    456 458
     		    ></td
    
    ... ... @@ -560,7 +562,9 @@
    560 562
     		      ></span
    
    561 563
     		      > <a href="#" title="Instances"
    
    562 564
     		      >Foo</a
    
    563
    -		      > ((,,) a a)</span
    
    565
    +		      > (<a href="#" title="Data.Tuple"
    
    566
    +		      >(,,)</a
    
    567
    +		      > a a)</span
    
    564 568
     		    > <a href="#" class="selflink"
    
    565 569
     		    >#</a
    
    566 570
     		    ></td
    
    ... ... @@ -1164,9 +1168,13 @@
    1164 1168
     		      ></span
    
    1165 1169
     		      > <a href="#" title="Instances"
    
    1166 1170
     		      >Foo</a
    
    1167
    -		      > ((,,) a b) =&gt; <a href="#" title="Instances"
    
    1171
    +		      > (<a href="#" title="Data.Tuple"
    
    1172
    +		      >(,,)</a
    
    1173
    +		      > a b) =&gt; <a href="#" title="Instances"
    
    1168 1174
     		      >Bar</a
    
    1169
    -		      > ((,,) a b) (a, b, a)</span
    
    1175
    +		      > (<a href="#" title="Data.Tuple"
    
    1176
    +		      >(,,)</a
    
    1177
    +		      > a b) (a, b, a)</span
    
    1170 1178
     		    > <a href="#" class="selflink"
    
    1171 1179
     		    >#</a
    
    1172 1180
     		    ></td