Remove hack put in place for #12512
authorRyan Scott <ryan.gl.scott@gmail.com>
Thu, 21 Dec 2017 00:25:37 +0000 (19:25 -0500)
committerRyan Scott <ryan.gl.scott@gmail.com>
Thu, 21 Dec 2017 00:25:38 +0000 (19:25 -0500)
Summary:
Previously, I added an ad hoc check for unboxed tuples and
sums in standalone-derived instances to fix #12512, under the
pretense that polymorphism over `UnboxedTupleRep` and
`UnboxedSumRep` was a lie. But that is no longer the case, and so
this ad hoc check can be removed entirely. Less code, and easier to
understand.

Test Plan: make test TEST=T12512

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

compiler/typecheck/TcDeriv.hs
testsuite/tests/deriving/should_fail/T12512.stderr

index 33ce581..f0ddce0 100644 (file)
@@ -638,12 +638,6 @@ deriveStandalone (L loc (DerivDecl deriv_ty deriv_strat' overlap_mode))
               -> do warnUselessTypeable
                     return Nothing
 
               -> do warnUselessTypeable
                     return Nothing
 
-              | isUnboxedTupleTyCon tc
-              -> bale_out $ unboxedTyConErr "tuple"
-
-              | isUnboxedSumTyCon tc
-              -> bale_out $ unboxedTyConErr "sum"
-
               | isAlgTyCon tc || isDataFamilyTyCon tc  -- All other classes
               -> do { spec <- mkEqnHelp (fmap unLoc overlap_mode)
                                         tvs cls cls_tys tc tc_args
               | isAlgTyCon tc || isDataFamilyTyCon tc  -- All other classes
               -> do { spec <- mkEqnHelp (fmap unLoc overlap_mode)
                                         tvs cls cls_tys tc tc_args
@@ -973,7 +967,7 @@ mkEqnHelp overlap_mode tvs cls cls_tys tycon tc_args mtheta deriv_strat
                          , denv_mtheta       = mtheta
                          , denv_strat        = deriv_strat }
        ; flip runReaderT deriv_env $
                          , denv_mtheta       = mtheta
                          , denv_strat        = deriv_strat }
        ; flip runReaderT deriv_env $
-         if isDataTyCon rep_tc then mkDataTypeEqn else mkNewTypeEqn }
+         if isNewTyCon rep_tc then mkNewTypeEqn else mkDataTypeEqn }
   where
      bale_out msg = failWithTc (derivingThingErr False cls cls_tys
                       (mkTyConApp tycon tc_args) deriv_strat msg)
   where
      bale_out msg = failWithTc (derivingThingErr False cls cls_tys
                       (mkTyConApp tycon tc_args) deriv_strat msg)
@@ -1932,7 +1926,3 @@ derivingHiddenErr tc
 standaloneCtxt :: LHsSigType GhcRn -> SDoc
 standaloneCtxt ty = hang (text "In the stand-alone deriving instance for")
                        2 (quotes (ppr ty))
 standaloneCtxt :: LHsSigType GhcRn -> SDoc
 standaloneCtxt ty = hang (text "In the stand-alone deriving instance for")
                        2 (quotes (ppr ty))
-
-unboxedTyConErr :: String -> MsgDoc
-unboxedTyConErr thing =
-  text "The last argument of the instance cannot be an unboxed" <+> text thing
index a62cda6..78c49f4 100644 (file)
@@ -1,10 +1,12 @@
 
 T12512.hs:10:1: error:
     • Can't make a derived instance of ‘Wat1 (# a, b #)’:
 
 T12512.hs:10:1: error:
     • Can't make a derived instance of ‘Wat1 (# a, b #)’:
-        The last argument of the instance cannot be an unboxed tuple
+        ‘Wat1’ is not a stock derivable class (Eq, Show, etc.)
+        Try enabling DeriveAnyClass
     • In the stand-alone deriving instance for ‘Wat1 (# a, b #)’
 
 T12512.hs:13:1: error:
     • Can't make a derived instance of ‘Wat2 (# a | b #)’:
     • In the stand-alone deriving instance for ‘Wat1 (# a, b #)’
 
 T12512.hs:13:1: error:
     • Can't make a derived instance of ‘Wat2 (# a | b #)’:
-        The last argument of the instance cannot be an unboxed sum
+        ‘Wat2’ is not a stock derivable class (Eq, Show, etc.)
+        Try enabling DeriveAnyClass
     • In the stand-alone deriving instance for ‘Wat2 (# a | b #)’
     • In the stand-alone deriving instance for ‘Wat2 (# a | b #)’