[Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type synonym printing (24459)

Andrei Borzenkov (@sand-witch) gitlab at gitlab.haskell.org
Wed Mar 13 08:26:44 UTC 2024



Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC


Commits:
61f884a0 by Andrei Borzenkov at 2024-03-13T12:26:22+04:00
Update GHCi :info type synonym printing (24459)

- Do not print result's kind since we have full kind
  in SAKS and we display invisible arity using @-binders

- Do not suppress significant invisible binders

Invisible binder is considered significant when it meets at least
one of two following criteria:
  - It visibly occurs in the RHS type
  - It is not followed by a visible binder, so it
    affects arity of type synonym

- - - - -


23 changed files:

- compiler/GHC/Core/TyCon.hs
- compiler/GHC/Iface/Syntax.hs
- compiler/GHC/Iface/Type.hs
- testsuite/tests/backpack/cabal/bkpcabal08/bkpcabal08.stdout
- testsuite/tests/backpack/should_fail/T19244a.stderr
- testsuite/tests/backpack/should_fail/T19244b.stderr
- testsuite/tests/backpack/should_fail/bkpfail46.stderr
- testsuite/tests/ghci/T18060/T18060.stdout
- testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout
- testsuite/tests/ghci/scripts/T15941.stdout
- testsuite/tests/ghci/scripts/T19310.stdout
- testsuite/tests/ghci/scripts/T21294a.stdout
- + testsuite/tests/ghci/scripts/T24459.script
- + testsuite/tests/ghci/scripts/T24459.stdout
- testsuite/tests/ghci/scripts/T8535.stdout
- testsuite/tests/ghci/scripts/T9181.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/ghci/scripts/ghci020.stdout
- testsuite/tests/ghci/should_run/T10145.stdout
- testsuite/tests/ghci/should_run/T18594.stdout
- testsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/rep-poly/RepPolyBackpack3.stderr


Changes:

=====================================
compiler/GHC/Core/TyCon.hs
=====================================
@@ -25,7 +25,7 @@ module GHC.Core.TyCon(
         mkRequiredTyConBinder,
         mkAnonTyConBinder, mkAnonTyConBinders,
         tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder,
-        isVisibleTyConBinder, isInvisibleTyConBinder,
+        isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder,
         isVisibleTcbVis, isInvisSpecTcbVis,
 
         -- ** Field labels
@@ -514,6 +514,10 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool
 isInvisSpecTcbVis (NamedTCB Specified) = True
 isInvisSpecTcbVis _                    = False
 
+isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool
+-- Works for IfaceTyConBinder too
+isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis
+
 isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool
 -- Works for IfaceTyConBinder too
 isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb)


=====================================
compiler/GHC/Iface/Syntax.hs
=====================================
@@ -1033,15 +1033,14 @@ pprIfaceDecl ss (IfaceClass { ifName  = clas
 
 pprIfaceDecl ss (IfaceSynonym { ifName    = tc
                               , ifBinders = binders
-                              , ifSynRhs  = mono_ty
+                              , ifSynRhs  = poly_ty
                               , ifResKind = res_kind})
   = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind)
-         , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals)
-           2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau
-                  , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ])
+         , hang (text "type" <+> pprIfaceDeclHeadInvis suppress_bndr_sig [] ss tc binders tau <+> equals)
+           2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ])
          ]
   where
-    (tvs, theta, tau) = splitIfaceSigmaTy mono_ty
+    (tvs, theta, tau) = splitIfaceSigmaTy poly_ty
     name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc)
 
     -- See Note [Printing type abbreviations] in GHC.Iface.Type
@@ -1232,6 +1231,18 @@ pprIfaceDeclHead suppress_sig context ss tc_occ bndrs
           <+> pprIfaceTyConBinders suppress_sig
                 (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ]
 
+pprIfaceDeclHeadInvis :: SuppressBndrSig
+                 -> IfaceContext -> ShowSub -> Name
+                 -> [IfaceTyConBinder]   -- of the tycon, for invisible-suppression
+                 -> IfaceType -- RHS
+                 -> SDoc
+pprIfaceDeclHeadInvis suppress_sig context ss tc_occ bndrs rhs
+  = sdocOption sdocPrintExplicitKinds $ \print_kinds ->
+    sep [ pprIfaceContextArr context
+        , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ)
+          <+> pprIfaceTyConBinders suppress_sig
+                (suppressIfaceInsignificantInvisibles (PrintExplicitKinds print_kinds) rhs bndrs) ]
+
 pprIfaceConDecl :: ShowSub -> Bool
                 -> IfaceTopBndr
                 -> [IfaceTyConBinder]


=====================================
compiler/GHC/Iface/Type.hs
=====================================
@@ -54,7 +54,7 @@ module GHC.Iface.Type (
         pprIfaceCoTcApp, pprTyTcApp, pprIfacePrefixApp,
         isIfaceRhoType,
 
-        suppressIfaceInvisibles,
+        suppressIfaceInvisibles, suppressIfaceInsignificantInvisibles,
         stripIfaceInvisVars,
         stripInvisArgs,
 
@@ -521,6 +521,26 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs
         | isInvisibleTyConBinder k =     suppress ks xs
         | otherwise                = x : suppress ks xs
 
+-- Invisible binder is considered significant when it meet at least
+-- one of two following criteria:
+--   - It visibly occurs in the RHS type
+--   - It is not followed by a visible binder, so it
+--     affects arity of type synonym
+suppressIfaceInsignificantInvisibles :: PrintExplicitKinds -> IfaceType -> [IfaceTyConBinder] -> [IfaceTyConBinder]
+suppressIfaceInsignificantInvisibles (PrintExplicitKinds True) _rhs tys = tys
+suppressIfaceInsignificantInvisibles (PrintExplicitKinds False) rhs tys = suppress [] tys
+    where
+      mentioned_var var = ifTyConBinderName var `ifTypeVarVisiblyOccurs` rhs
+
+      mentioned_vars vars =
+        filter mentioned_var vars
+
+      suppress acc []     = reverse acc
+      suppress acc (k:ks) = case binderFlag k of
+          NamedTCB Specified -> suppress (k : acc) ks
+          NamedTCB Inferred  -> suppress acc ks
+          _                  -> reverse (mentioned_vars acc) ++ k : suppress [] ks
+
 stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder]
 stripIfaceInvisVars (PrintExplicitKinds True)  tyvars = tyvars
 stripIfaceInvisVars (PrintExplicitKinds False) tyvars
@@ -561,6 +581,27 @@ ifTypeIsVarFree ty = go ty
     go_args IA_Nil = True
     go_args (IA_Arg arg _ args) = go arg && go_args args
 
+ifTypeVarVisiblyOccurs :: IfLclName -> IfaceType -> Bool
+-- Returns True if the type contains this name. Doesn't count
+-- invisible application
+-- Just used to control pretty printing
+ifTypeVarVisiblyOccurs name ty = go ty
+  where
+    go (IfaceTyVar var)         = var == name
+    go (IfaceFreeTyVar {})      = False
+    go (IfaceAppTy fun args)    = go fun || go_args args
+    go (IfaceFunTy _ w arg res) = go w || go arg || go res
+    go (IfaceForAllTy bndr ty)  = go (ifaceBndrType (binderVar bndr)) || go ty
+    go (IfaceTyConApp _ args)  = go_args args
+    go (IfaceTupleTy _ _ args) = go_args args
+    go (IfaceLitTy _)          = False
+    go (IfaceCastTy {})        = False -- Safe
+    go (IfaceCoercionTy {})    = False -- Safe
+
+    go_args IA_Nil = False
+    go_args (IA_Arg arg Required args) = go arg || go_args args
+    go_args (IA_Arg _arg _ args) = go_args args
+
 {- Note [Substitution on IfaceType]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Substitutions on IfaceType are done only during pretty-printing to


=====================================
testsuite/tests/backpack/cabal/bkpcabal08/bkpcabal08.stdout
=====================================
@@ -1,11 +1,11 @@
-Preprocessing library 'impl' for bkpcabal08-0.1.0.0...
-Building library 'impl' for bkpcabal08-0.1.0.0...
 Preprocessing library 'p' for bkpcabal08-0.1.0.0...
 Building library 'p' instantiated with
   A = <A>
   B = <B>
 for bkpcabal08-0.1.0.0...
 [2 of 2] Compiling B[sig]           ( p/B.hsig, nothing )
+Preprocessing library 'impl' for bkpcabal08-0.1.0.0...
+Building library 'impl' for bkpcabal08-0.1.0.0...
 Preprocessing library 'q' for bkpcabal08-0.1.0.0...
 Building library 'q' instantiated with
   A = <A>
@@ -13,13 +13,13 @@ Building library 'q' instantiated with
 for bkpcabal08-0.1.0.0...
 [2 of 4] Compiling B[sig]           ( q/B.hsig, nothing )
 [3 of 4] Compiling M                ( q/M.hs, nothing ) [A changed]
-[4 of 4] Instantiating bkpcabal08-0.1.0.0-5O1mUtZZLBeDZEqqtwJcCj-p
+[4 of 4] Instantiating bkpcabal08-0.1.0.0-CoQJNXLfoYQ4TyvApzFHv-p
 Preprocessing library 'q' for bkpcabal08-0.1.0.0...
 Building library 'q' instantiated with
-  A = bkpcabal08-0.1.0.0-DlVb5PcmUolGCHYbfTL7EP-impl:A
-  B = bkpcabal08-0.1.0.0-DlVb5PcmUolGCHYbfTL7EP-impl:B
+  A = bkpcabal08-0.1.0.0-5HJrxUERN7CD204UZeT4Ws-impl:A
+  B = bkpcabal08-0.1.0.0-5HJrxUERN7CD204UZeT4Ws-impl:B
 for bkpcabal08-0.1.0.0...
-[1 of 3] Compiling A[sig]           ( q/A.hsig, dist/build/bkpcabal08-0.1.0.0-LFiTKyjPqyn9yyuysCoVKg-q+5IA1jA4bEzCFcXtraqAC38/A.o ) [Prelude package changed]
-[2 of 3] Compiling B[sig]           ( q/B.hsig, dist/build/bkpcabal08-0.1.0.0-LFiTKyjPqyn9yyuysCoVKg-q+5IA1jA4bEzCFcXtraqAC38/B.o ) [Prelude package changed]
+[1 of 3] Compiling A[sig]           ( q/A.hsig, dist/build/bkpcabal08-0.1.0.0-1DQJ9DKc4h59P07qcb0kBc-q+J5mAfRWG9IgLmFQVftCb8t/A.o ) [Prelude package changed]
+[2 of 3] Compiling B[sig]           ( q/B.hsig, dist/build/bkpcabal08-0.1.0.0-1DQJ9DKc4h59P07qcb0kBc-q+J5mAfRWG9IgLmFQVftCb8t/B.o ) [Prelude package changed]
 Preprocessing library 'r' for bkpcabal08-0.1.0.0...
 Building library 'r' for bkpcabal08-0.1.0.0...


=====================================
testsuite/tests/backpack/should_fail/T19244a.stderr
=====================================
@@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843]
     • Type constructor ‘Key’ has conflicting definitions in the module
       and its hsig file.
       Main module: type Key :: * -> Constraint
-                   type Key = GHC.Classes.Ord :: * -> Constraint
+                   type Key = GHC.Classes.Ord
         Hsig file: type Key :: forall {k}. k -> Constraint
                    class Key k1
       The types have different kinds.


=====================================
testsuite/tests/backpack/should_fail/T19244b.stderr
=====================================
@@ -1,20 +1,20 @@
 [1 of 3] Processing user
-  [1 of 2] Compiling Map[sig]         ( user\Map.hsig, nothing )
-  [2 of 2] Compiling User             ( user\User.hs, nothing )
+  [1 of 2] Compiling Map[sig]         ( user/Map.hsig, nothing )
+  [2 of 2] Compiling User             ( user/User.hs, nothing )
 [2 of 3] Processing ordmap
   Instantiating ordmap
-  [1 of 1] Compiling Map              ( ordmap\Map.hs, T19244b.out\ordmap\Map.o )
+  [1 of 1] Compiling Map              ( ordmap/Map.hs, T19244b.out/ordmap/Map.o )
 [3 of 3] Processing main
   Instantiating main
   [1 of 1] Including user[Map=ordmap:Map]
     Instantiating user[Map=ordmap:Map]
-    [1 of 2] Compiling Map[sig]         ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o )
+    [1 of 2] Compiling Map[sig]         ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o )
 
 T19244b.bkp:11:27: error: [GHC-15843]
     • Type constructor ‘Key’ has conflicting definitions in the module
       and its hsig file.
       Main module: type Key :: * -> Constraint
-                   type Key = GHC.Classes.Ord :: * -> Constraint
+                   type Key = GHC.Classes.Ord
         Hsig file: type Key :: forall {k}. k -> Constraint
                    class Key k1
       The types have different kinds.


=====================================
testsuite/tests/backpack/should_fail/bkpfail46.stderr
=====================================
@@ -1,20 +1,20 @@
 [1 of 3] Processing p
-  [1 of 2] Compiling A[sig]           ( p\A.hsig, nothing )
-  [2 of 2] Compiling M                ( p\M.hs, nothing )
+  [1 of 2] Compiling A[sig]           ( p/A.hsig, nothing )
+  [2 of 2] Compiling M                ( p/M.hs, nothing )
 [2 of 3] Processing q
   Instantiating q
-  [1 of 1] Compiling A                ( q\A.hs, bkpfail46.out\q\A.o )
+  [1 of 1] Compiling A                ( q/A.hs, bkpfail46.out/q/A.o )
 [3 of 3] Processing r
   Instantiating r
   [1 of 1] Including p[A=q:A]
     Instantiating p[A=q:A]
-    [1 of 2] Compiling A[sig]           ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o )
+    [1 of 2] Compiling A[sig]           ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o )
 
 bkpfail46.bkp:16:9: error: [GHC-15843]
     • Type constructor ‘K’ has conflicting definitions in the module
       and its hsig file.
       Main module: type K :: * -> Constraint
-                   type K a = GHC.Classes.Eq a :: Constraint
+                   type K a = GHC.Classes.Eq a
         Hsig file: type K :: * -> Constraint
                    class K a
       Illegal parameterized type synonym in implementation of abstract data.


=====================================
testsuite/tests/ghci/T18060/T18060.stdout
=====================================
@@ -1,5 +1,5 @@
 type (->) :: * -> * -> *
-type (->) = FUN Many :: * -> * -> *
+type (->) = FUN Many
   	-- Defined in ‘GHC.Types’
 infixr -1 ->
 instance Monoid b => Monoid (a -> b)


=====================================
testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout
=====================================
@@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b
 (#  ,  #) :: a -> b -> Tuple2# a b
 (Int, Int) :: Tuple2 (*) (*)
 type T :: Tuple2 (*) (*)
-type T = (Int, Int) :: Tuple2 (*) (*)
+type T = (Int, Int)
   	-- Defined at <interactive>:18:1
 type S :: Solo (*)
-type S = MkSolo Int :: Solo (*)
+type S = MkSolo Int
   	-- Defined at <interactive>:19:1
 type L :: List (*)
-type L = [Int] :: List (*)
+type L = [Int]
   	-- Defined at <interactive>:20:1
 f :: Int -> Tuple2 Int Int -> Int
 (\ (_, _) -> ()) :: Tuple2 a b -> Unit


=====================================
testsuite/tests/ghci/scripts/T15941.stdout
=====================================
@@ -1,4 +1,3 @@
 type T :: * -> * -> *
-type T =
-  (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> *
+type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep}
   	-- Defined at <interactive>:2:1


=====================================
testsuite/tests/ghci/scripts/T19310.stdout
=====================================
@@ -1,3 +1,3 @@
 type T :: * -> * -> *
-type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> *
+type T = (->) @{LiftedRep} @{LiftedRep}
   	-- Defined at <interactive>:3:1


=====================================
testsuite/tests/ghci/scripts/T21294a.stdout
=====================================
@@ -1,5 +1,5 @@
 type L0 :: * -> *
-type L0 = [] :: * -> *
+type L0 = []
   	-- Defined at <interactive>:1:1
 type L1 :: * -> *
 type L1 a = [a]


=====================================
testsuite/tests/ghci/scripts/T24459.script
=====================================
@@ -0,0 +1,46 @@
+:set -XTypeAbstractions
+
+:{
+import Data.Kind
+import Data.Data
+
+
+type T6 :: forall k. Type -> Type
+type T6 _a = ()
+
+type T5 :: forall a. Type -> Type
+type T5 @a _b = Proxy _b
+
+type T4 :: forall a. Type -> Type
+type T4 @a _b = Proxy a
+
+type T3 :: forall k. k -> Type
+type T3 a = Proxy a
+
+type T2 :: forall k. k -> Type
+type T2 @k = Proxy
+
+type T1 :: forall k. k -> Type
+type T1 = Proxy
+
+type T0 :: forall k. k -> Type
+type T0 = Proxy :: forall k. k -> Type
+:}
+
+:i T0
+:i T1
+:i T2
+:i T3
+:i T4
+:i T5
+:i T6
+
+:set -fprint-explicit-kinds
+
+:i T0
+:i T1
+:i T2
+:i T3
+:i T4
+:i T5
+:i T6


=====================================
testsuite/tests/ghci/scripts/T24459.stdout
=====================================
@@ -0,0 +1,42 @@
+type T0 :: forall k. k -> *
+type T0 = Proxy
+  	-- Defined at <interactive>:27:1
+type T1 :: forall k. k -> *
+type T1 = Proxy
+  	-- Defined at <interactive>:24:1
+type T2 :: forall k. k -> *
+type T2 @k = Proxy
+  	-- Defined at <interactive>:21:1
+type T3 :: forall k. k -> *
+type T3 a = Proxy a
+  	-- Defined at <interactive>:18:1
+type T4 :: forall {k} (a :: k). * -> *
+type T4 @a _b = Proxy a
+  	-- Defined at <interactive>:15:1
+type T5 :: forall {k} (a :: k). * -> *
+type T5 _b = Proxy _b
+  	-- Defined at <interactive>:12:1
+type T6 :: forall {k} (k1 :: k). * -> *
+type T6 _a = ()
+  	-- Defined at <interactive>:9:1
+type T0 :: forall k. k -> *
+type T0 = Proxy
+  	-- Defined at <interactive>:27:1
+type T1 :: forall k. k -> *
+type T1 = Proxy
+  	-- Defined at <interactive>:24:1
+type T2 :: forall k. k -> *
+type T2 @k = Proxy @{k}
+  	-- Defined at <interactive>:21:1
+type T3 :: forall k. k -> *
+type T3 @k a = Proxy @{k} a
+  	-- Defined at <interactive>:18:1
+type T4 :: forall {k} (a :: k). * -> *
+type T4 @{k} @a _b = Proxy @{k} a
+  	-- Defined at <interactive>:15:1
+type T5 :: forall {k} (a :: k). * -> *
+type T5 @{k} @a _b = Proxy @{*} _b
+  	-- Defined at <interactive>:12:1
+type T6 :: forall {k} (k1 :: k). * -> *
+type T6 @{k} @k1 _a = ()
+  	-- Defined at <interactive>:9:1


=====================================
testsuite/tests/ghci/scripts/T8535.stdout
=====================================
@@ -1,5 +1,5 @@
 type (->) :: * -> * -> *
-type (->) = FUN Many :: * -> * -> *
+type (->) = FUN Many
   	-- Defined in ‘GHC.Types’
 infixr -1 ->
 instance Monoid b => Monoid (a -> b)


=====================================
testsuite/tests/ghci/scripts/T9181.stdout
=====================================
@@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y =
   GHC.Internal.TypeError.Assert
     (x GHC.Internal.Data.Type.Ord.<=? y)
     (GHC.Internal.Data.Type.Ord.LeErrMsg x y)
-  :: Constraint
 type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool
 type (GHC.Internal.Data.Type.Ord.<=?) m n =
   GHC.Internal.Data.Type.Ord.OrdCond
     (GHC.Internal.Data.Type.Ord.Compare m n) True True False
-  :: Bool
 type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol
                                            -> GHC.Types.Symbol -> GHC.Types.Symbol
 type family GHC.Internal.TypeLits.AppendSymbol a b


=====================================
testsuite/tests/ghci/scripts/all.T
=====================================
@@ -384,3 +384,4 @@ test('T23686', normal, ghci_script, ['T23686.script'])
 test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script'])
 test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script'])
 test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script'])
+test('T24459', normal, ghci_script, ['T24459.script'])


=====================================
testsuite/tests/ghci/scripts/ghci020.stdout
=====================================
@@ -1,5 +1,5 @@
 type (->) :: * -> * -> *
-type (->) = FUN Many :: * -> * -> *
+type (->) = FUN Many
   	-- Defined in ‘GHC.Types’
 infixr -1 ->
 instance Monoid b => Monoid (a -> b)


=====================================
testsuite/tests/ghci/should_run/T10145.stdout
=====================================
@@ -1,5 +1,5 @@
 type (->) :: * -> * -> *
-type (->) = FUN Many :: * -> * -> *
+type (->) = FUN Many
   	-- Defined in ‘GHC.Types’
 infixr -1 ->
 instance Monoid b => Monoid (a -> b)


=====================================
testsuite/tests/ghci/should_run/T18594.stdout
=====================================
@@ -1,5 +1,5 @@
 type (->) :: * -> * -> *
-type (->) = FUN Many :: * -> * -> *
+type (->) = FUN Many
   	-- Defined in ‘GHC.Types’
 infixr -1 ->
 instance Monoid b => Monoid (a -> b)


=====================================
testsuite/tests/interface-stability/base-exports.stdout
=====================================
@@ -1760,27 +1760,27 @@ module Data.Type.Equality where
 module Data.Type.Ord where
   -- Safety: Safe
   type (<) :: forall {t}. t -> t -> Constraint
-  type (<) x y = GHC.Internal.TypeError.Assert (x <? y) (GHC.Internal.Data.Type.Ord.LtErrMsg x y) :: Constraint
+  type (<) x y = GHC.Internal.TypeError.Assert (x <? y) (GHC.Internal.Data.Type.Ord.LtErrMsg x y)
   type (<=) :: forall {t}. t -> t -> Constraint
-  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint
+  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y)
   type (<=?) :: forall k. k -> k -> GHC.Types.Bool
-  type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool
+  type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False
   type (<?) :: forall k. k -> k -> GHC.Types.Bool
-  type (<?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.False GHC.Types.False :: GHC.Types.Bool
+  type (<?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.False GHC.Types.False
   type (>) :: forall {t}. t -> t -> Constraint
-  type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint
+  type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y)
   type (>=) :: forall {t}. t -> t -> Constraint
-  type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint
+  type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y)
   type (>=?) :: forall k. k -> k -> GHC.Types.Bool
-  type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool
+  type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True
   type (>?) :: forall k. k -> k -> GHC.Types.Bool
-  type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool
+  type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True
   type Compare :: forall k. k -> k -> GHC.Types.Ordering
   type family Compare a b
   type Max :: forall k. k -> k -> k
-  type Max m n = OrdCond (Compare m n) n n m :: k
+  type Max m n = OrdCond (Compare m n) n n m
   type Min :: forall k. k -> k -> k
-  type Min m n = OrdCond (Compare m n) m m n :: k
+  type Min m n = OrdCond (Compare m n) m m n
   type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k
   type family OrdCond o lt eq gt where
     forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt
@@ -3315,7 +3315,7 @@ module GHC.Base where
   type Levity :: *
   data Levity = Lifted | Unlifted
   type LiftedRep :: RuntimeRep
-  type LiftedRep = BoxedRep Lifted :: RuntimeRep
+  type LiftedRep = BoxedRep Lifted
   type List :: * -> *
   data List a = ...
   type role MVar# nominal representational
@@ -3428,7 +3428,7 @@ module GHC.Base where
   type TypeLitSort :: *
   data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar
   type UnliftedRep :: RuntimeRep
-  type UnliftedRep = BoxedRep Unlifted :: RuntimeRep
+  type UnliftedRep = BoxedRep Unlifted
   type UnliftedType :: *
   type UnliftedType = TYPE UnliftedRep
   type VecCount :: *
@@ -3438,7 +3438,7 @@ module GHC.Base where
   type Void :: *
   data Void
   type Void# :: ZeroBitType
-  type Void# = (# #) :: ZeroBitType
+  type Void# = (# #)
   type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType
   data Weak# a
   type WithDict :: Constraint -> * -> Constraint
@@ -3484,7 +3484,7 @@ module GHC.Base where
   type WordBox :: TYPE WordRep -> *
   data WordBox a = MkWordBox a
   type ZeroBitRep :: RuntimeRep
-  type ZeroBitRep = TupleRep '[] :: RuntimeRep
+  type ZeroBitRep = TupleRep '[]
   type ZeroBitType :: *
   type ZeroBitType = TYPE ZeroBitRep
   absentErr :: forall a. a
@@ -5513,7 +5513,7 @@ module GHC.Exts where
   type Levity :: *
   data Levity = Lifted | Unlifted
   type LiftedRep :: RuntimeRep
-  type LiftedRep = BoxedRep Lifted :: RuntimeRep
+  type LiftedRep = BoxedRep Lifted
   type List :: * -> *
   data List a = ...
   type role MVar# nominal representational
@@ -5588,7 +5588,7 @@ module GHC.Exts where
   TypeLitNat :: GHC.Types.TypeLitSort
   TypeLitSymbol :: GHC.Types.TypeLitSort
   type UnliftedRep :: RuntimeRep
-  type UnliftedRep = BoxedRep Unlifted :: RuntimeRep
+  type UnliftedRep = BoxedRep Unlifted
   type UnliftedType :: *
   type UnliftedType = TYPE UnliftedRep
   type VecCount :: *
@@ -5596,7 +5596,7 @@ module GHC.Exts where
   type VecElem :: *
   data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep
   type Void# :: ZeroBitType
-  type Void# = (# #) :: ZeroBitType
+  type Void# = (# #)
   type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType
   data Weak# a
   type WithDict :: Constraint -> * -> Constraint
@@ -5642,7 +5642,7 @@ module GHC.Exts where
   type WordBox :: TYPE WordRep -> *
   data WordBox a = MkWordBox a
   type ZeroBitRep :: RuntimeRep
-  type ZeroBitRep = TupleRep '[] :: RuntimeRep
+  type ZeroBitRep = TupleRep '[]
   type ZeroBitType :: *
   type ZeroBitType = TYPE ZeroBitRep
   acosDouble# :: Double# -> Double#
@@ -7377,7 +7377,7 @@ module GHC.Generics where
   type C :: *
   data C
   type C1 :: forall {k}. Meta -> (k -> *) -> k -> *
-  type C1 = M1 C :: Meta -> (k -> *) -> k -> *
+  type C1 = M1 C
   type Constructor :: forall {k}. k -> Constraint
   class Constructor c where
     conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char]
@@ -7387,7 +7387,7 @@ module GHC.Generics where
   type D :: *
   data D
   type D1 :: forall {k}. Meta -> (k -> *) -> k -> *
-  type D1 = M1 D :: Meta -> (k -> *) -> k -> *
+  type D1 = M1 D
   type Datatype :: forall {k}. k -> Constraint
   class Datatype d where
     datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char]
@@ -7434,14 +7434,14 @@ module GHC.Generics where
   type R :: *
   data R
   type Rec0 :: forall {k}. * -> k -> *
-  type Rec0 = K1 R :: * -> k -> *
+  type Rec0 = K1 R
   type role Rec1 representational nominal
   type Rec1 :: forall k. (k -> *) -> k -> *
   newtype Rec1 f p = Rec1 {unRec1 :: f p}
   type S :: *
   data S
   type S1 :: forall {k}. Meta -> (k -> *) -> k -> *
-  type S1 = M1 S :: Meta -> (k -> *) -> k -> *
+  type S1 = M1 S
   type Selector :: forall {k}. k -> Constraint
   class Selector s where
     selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char]
@@ -7458,24 +7458,24 @@ module GHC.Generics where
   data U1 p = U1
   UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p
   type UAddr :: forall {k}. k -> *
-  type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> *
+  type UAddr = URec (GHC.Internal.Ptr.Ptr ())
   UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p
   type UChar :: forall {k}. k -> *
-  type UChar = URec GHC.Types.Char :: k -> *
+  type UChar = URec GHC.Types.Char
   UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p
   type UDouble :: forall {k}. k -> *
-  type UDouble = URec GHC.Types.Double :: k -> *
+  type UDouble = URec GHC.Types.Double
   UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p
   type UFloat :: forall {k}. k -> *
-  type UFloat = URec GHC.Types.Float :: k -> *
+  type UFloat = URec GHC.Types.Float
   UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p
   type UInt :: forall {k}. k -> *
-  type UInt = URec GHC.Types.Int :: k -> *
+  type UInt = URec GHC.Types.Int
   type URec :: forall k. * -> k -> *
   data family URec a p
   UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p
   type UWord :: forall {k}. k -> *
-  type UWord = URec GHC.Types.Word :: k -> *
+  type UWord = URec GHC.Types.Word
   type role V1 phantom
   type V1 :: forall k. k -> *
   data V1 p
@@ -8563,7 +8563,7 @@ module GHC.Num.BigNat where
   type BigNat :: *
   data BigNat = BN# {unBigNat :: BigNat#}
   type BigNat# :: GHC.Types.UnliftedType
-  type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType
+  type BigNat# = GHC.Num.WordArray.WordArray#
   bigNatAdd :: BigNat# -> BigNat# -> BigNat#
   bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat#
   bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat#
@@ -9345,7 +9345,7 @@ module GHC.Stack where
   type CostCentreStack :: *
   data CostCentreStack
   type HasCallStack :: Constraint
-  type HasCallStack = ?callStack::CallStack :: Constraint
+  type HasCallStack = ?callStack::CallStack
   type SrcLoc :: *
   data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: GHC.Types.Int, srcLocStartCol :: GHC.Types.Int, srcLocEndLine :: GHC.Types.Int, srcLocEndCol :: GHC.Types.Int}
   callStack :: HasCallStack => CallStack
@@ -9406,7 +9406,7 @@ module GHC.Stack.Types where
   type CallStack :: *
   data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack
   type HasCallStack :: Constraint
-  type HasCallStack = ?callStack::CallStack :: Constraint
+  type HasCallStack = ?callStack::CallStack
   type SrcLoc :: *
   data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: GHC.Types.Int, srcLocStartCol :: GHC.Types.Int, srcLocEndLine :: GHC.Types.Int, srcLocEndCol :: GHC.Types.Int}
   emptyCallStack :: CallStack
@@ -9561,9 +9561,9 @@ module GHC.TypeLits where
   type (-) :: Natural -> Natural -> Natural
   type family (-) a b
   type (<=) :: forall {t}. t -> t -> Constraint
-  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint
+  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y)
   type (<=?) :: forall k. k -> k -> GHC.Types.Bool
-  type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool
+  type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False
   type AppendSymbol :: Symbol -> Symbol -> Symbol
   type family AppendSymbol a b
   type CharToNat :: GHC.Types.Char -> Natural
@@ -9680,9 +9680,9 @@ module GHC.TypeNats where
   type (-) :: Natural -> Natural -> Natural
   type family (-) a b
   type (<=) :: forall {t}. t -> t -> Constraint
-  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint
+  type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y)
   type (<=?) :: forall k. k -> k -> GHC.Types.Bool
-  type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool
+  type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False
   type CmpNat :: Natural -> Natural -> GHC.Types.Ordering
   type family CmpNat a b
   type Div :: Natural -> Natural -> Natural


=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout
=====================================
@@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where
   class a => CSolo a
     {-# MINIMAL #-}
   type CTuple0 :: Constraint
-  type CTuple0 = () :: Constraint :: Constraint
+  type CTuple0 = () :: Constraint
   type CTuple1 :: Constraint -> Constraint
-  type CTuple1 = CSolo :: Constraint -> Constraint
+  type CTuple1 = CSolo
   type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint
   class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j
     {-# MINIMAL #-}
@@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where
   type Tuple0 :: *
   type Tuple0 = ()
   type Tuple0# :: GHC.Types.ZeroBitType
-  type Tuple0# = (# #) :: GHC.Types.ZeroBitType
+  type Tuple0# = (# #)
   type Tuple1 :: * -> *
-  type Tuple1 = Solo :: * -> *
+  type Tuple1 = Solo
   type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep])
-  type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep])
+  type Tuple1# = Solo#
   type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> *
   data Tuple10 a b c d e f g h i j = ...
   type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9])
@@ -4328,9 +4328,9 @@ module Prelude.Experimental where
   class a => CSolo a
     {-# MINIMAL #-}
   type CTuple0 :: Constraint
-  type CTuple0 = () :: Constraint :: Constraint
+  type CTuple0 = () :: Constraint
   type CTuple1 :: Constraint -> Constraint
-  type CTuple1 = CSolo :: Constraint -> Constraint
+  type CTuple1 = CSolo
   type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint
   class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j
     {-# MINIMAL #-}
@@ -6959,11 +6959,11 @@ module Prelude.Experimental where
   type Tuple0 :: *
   type Tuple0 = ()
   type Tuple0# :: GHC.Types.ZeroBitType
-  type Tuple0# = (# #) :: GHC.Types.ZeroBitType
+  type Tuple0# = (# #)
   type Tuple1 :: * -> *
-  type Tuple1 = Solo :: * -> *
+  type Tuple1 = Solo
   type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep])
-  type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep])
+  type Tuple1# = Solo#
   type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> *
   data Tuple10 a b c d e f g h i j = ...
   type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9])


=====================================
testsuite/tests/rep-poly/RepPolyBackpack3.stderr
=====================================
@@ -1,19 +1,19 @@
 [1 of 3] Processing sig
-  [1 of 1] Compiling Sig[sig]         ( sig\Sig.hsig, nothing )
+  [1 of 1] Compiling Sig[sig]         ( sig/Sig.hsig, nothing )
 [2 of 3] Processing impl
   Instantiating impl
-  [1 of 1] Compiling Impl             ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o )
+  [1 of 1] Compiling Impl             ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o )
 [3 of 3] Processing main
   Instantiating main
   [1 of 1] Including sig[Sig=impl:Impl]
     Instantiating sig[Sig=impl:Impl]
-    [1 of 1] Compiling Sig[sig]         ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o )
+    [1 of 1] Compiling Sig[sig]         ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o )
 
 RepPolyBackpack3.bkp:17:5: error: [GHC-15843]
     • Type constructor ‘Rep’ has conflicting definitions in the module
       and its hsig file.
       Main module: type Rep :: GHC.Types.RuntimeRep
-                   type Rep = T :: GHC.Types.RuntimeRep
+                   type Rep = T
         Hsig file: type Rep :: GHC.Types.RuntimeRep
                    data Rep
       Illegal implementation of abstract data: Invalid type family ‘T’.



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/61f884a02e9a3360f0a0e911e203c763ea33b90a

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/61f884a02e9a3360f0a0e911e203c763ea33b90a
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240313/7e9e2c97/attachment-0001.html>


More information about the ghc-commits mailing list