RE: [commit: ghc] master: Allow deriving Typeable for more tycons (92191a3)
Pedro Surely should be some user-manual change to go with this? Simon | -----Original Message----- | From: ghc-commits-bounces@haskell.org [mailto:ghc-commits- | bounces@haskell.org] On Behalf Of José Pedro Magalhães | Sent: 07 May 2013 13:27 | To: ghc-commits@haskell.org | Subject: [commit: ghc] master: Allow deriving Typeable for more tycons | (92191a3) | | Repository : http://darcs.haskell.org/ghc.git/ | | On branch : master | | https://github.com/ghc/ghc/commit/92191a39a59a036fde4de926e2e322a2c50c84 | cf | | >--------------------------------------------------------------- | | commit 92191a39a59a036fde4de926e2e322a2c50c84cf | Author: Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> | Date: Tue May 7 09:16:29 2013 +0100 | | Allow deriving Typeable for more tycons | | >--------------------------------------------------------------- | | compiler/typecheck/TcDeriv.lhs | 3 ++- | 1 file changed, 2 insertions(+), 1 deletion(-) | | diff --git a/compiler/typecheck/TcDeriv.lhs | b/compiler/typecheck/TcDeriv.lhs index 7da30d19b..9b82ed6 100644 | --- a/compiler/typecheck/TcDeriv.lhs | +++ b/compiler/typecheck/TcDeriv.lhs | @@ -683,7 +683,8 @@ mkEqnHelp :: CtOrigin -> [TyVar] -> Class -> [Type] | -> Type | | mkEqnHelp orig tvs cls cls_tys tc_app mtheta | | Just (tycon, tc_args) <- tcSplitTyConApp_maybe tc_app | - , isAlgTyCon tycon -- Check for functions, primitive types etc | + , className cls == typeableClassName || isAlgTyCon tycon | + -- Avoid functions, primitive types, etc, unless it's Typeable | = mk_alg_eqn tycon tc_args | | otherwise | = failWithTc (derivingThingErr False cls cls_tys tc_app | | | | _______________________________________________ | ghc-commits mailing list | ghc-commits@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-commits
Hi Simon, Yes. I still need to do some more work, though, because one thing is not yet working as I would like it to. Right now, if you define a datatype with -XDataKinds, you can derive Typeable for the promoted constructors: data N = Z | S N deriving Typeable -- for N
deriving instance Typeable Z deriving instance Typeable S
Note that the last two Typeable instances can only be given by standalone deriving. However, in case the user specifies -XAutoDeriveTypeable, I would expect all three instances to be unnecessary. Right now, however, we do not automatically derive Typeable instances for promoted constructors. This is because they are not tycl_decls (as in makeDerivSpecs in TcDeriv). What's the best way to easily get hold of all the promoted tycons in a module? Thanks, Pedro On Wed, May 8, 2013 at 10:37 AM, Simon Peyton-Jones <simonpj@microsoft.com>wrote:
Pedro
Surely should be some user-manual change to go with this?
Simon
| -----Original Message----- | From: ghc-commits-bounces@haskell.org [mailto:ghc-commits- | bounces@haskell.org] On Behalf Of José Pedro Magalhães | Sent: 07 May 2013 13:27 | To: ghc-commits@haskell.org | Subject: [commit: ghc] master: Allow deriving Typeable for more tycons | (92191a3) | | Repository : http://darcs.haskell.org/ghc.git/ | | On branch : master | | https://github.com/ghc/ghc/commit/92191a39a59a036fde4de926e2e322a2c50c84 | cf | | >--------------------------------------------------------------- | | commit 92191a39a59a036fde4de926e2e322a2c50c84cf | Author: Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> | Date: Tue May 7 09:16:29 2013 +0100 | | Allow deriving Typeable for more tycons | | >--------------------------------------------------------------- | | compiler/typecheck/TcDeriv.lhs | 3 ++- | 1 file changed, 2 insertions(+), 1 deletion(-) | | diff --git a/compiler/typecheck/TcDeriv.lhs | b/compiler/typecheck/TcDeriv.lhs index 7da30d19b..9b82ed6 100644 | --- a/compiler/typecheck/TcDeriv.lhs | +++ b/compiler/typecheck/TcDeriv.lhs | @@ -683,7 +683,8 @@ mkEqnHelp :: CtOrigin -> [TyVar] -> Class -> [Type] | -> Type | | mkEqnHelp orig tvs cls cls_tys tc_app mtheta | | Just (tycon, tc_args) <- tcSplitTyConApp_maybe tc_app | - , isAlgTyCon tycon -- Check for functions, primitive types etc | + , className cls == typeableClassName || isAlgTyCon tycon | + -- Avoid functions, primitive types, etc, unless it's Typeable | = mk_alg_eqn tycon tc_args | | otherwise | = failWithTc (derivingThingErr False cls cls_tys tc_app | | | | _______________________________________________ | ghc-commits mailing list | ghc-commits@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-commits
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs
Oh, it's easy. If you know what TyCons are defined in this file (and you do, in derivTyDecl), then find the TyCon, and then do [ promoted_dc | Just promoted_dc <- map promoteDataCon_maybe (tyConDataCons tc) ] Simon Microsoft Research Limited (company number 03369488) is registered in England and Wales Registered office 21 Station Road, Cambridge, CB1 2FB From: josepedromagalhaes@gmail.com [mailto:josepedromagalhaes@gmail.com] On Behalf Of José Pedro Magalhães Sent: 16 May 2013 10:34 To: Simon Peyton-Jones Cc: ghc-devs@haskell.org Subject: Re: [commit: ghc] master: Allow deriving Typeable for more tycons (92191a3) Hi Simon, Yes. I still need to do some more work, though, because one thing is not yet working as I would like it to. Right now, if you define a datatype with -XDataKinds, you can derive Typeable for the promoted constructors: data N = Z | S N deriving Typeable -- for N deriving instance Typeable Z deriving instance Typeable S Note that the last two Typeable instances can only be given by standalone deriving. However, in case the user specifies -XAutoDeriveTypeable, I would expect all three instances to be unnecessary. Right now, however, we do not automatically derive Typeable instances for promoted constructors. This is because they are not tycl_decls (as in makeDerivSpecs in TcDeriv). What's the best way to easily get hold of all the promoted tycons in a module? Thanks, Pedro On Wed, May 8, 2013 at 10:37 AM, Simon Peyton-Jones <simonpj@microsoft.com<mailto:simonpj@microsoft.com>> wrote: Pedro Surely should be some user-manual change to go with this? Simon | -----Original Message----- | From: ghc-commits-bounces@haskell.org<mailto:ghc-commits-bounces@haskell.org> [mailto:ghc-commits-<mailto:ghc-commits-> | bounces@haskell.org<mailto:bounces@haskell.org>] On Behalf Of José Pedro Magalhães | Sent: 07 May 2013 13:27 | To: ghc-commits@haskell.org<mailto:ghc-commits@haskell.org> | Subject: [commit: ghc] master: Allow deriving Typeable for more tycons | (92191a3) | | Repository : http://darcs.haskell.org/ghc.git/ | | On branch : master | | https://github.com/ghc/ghc/commit/92191a39a59a036fde4de926e2e322a2c50c84 | cf | | >--------------------------------------------------------------- | | commit 92191a39a59a036fde4de926e2e322a2c50c84cf | Author: Jose Pedro Magalhaes <jpm@cs.ox.ac.uk<mailto:jpm@cs.ox.ac.uk>> | Date: Tue May 7 09:16:29 2013 +0100 | | Allow deriving Typeable for more tycons | | >--------------------------------------------------------------- | | compiler/typecheck/TcDeriv.lhs | 3 ++- | 1 file changed, 2 insertions(+), 1 deletion(-) | | diff --git a/compiler/typecheck/TcDeriv.lhs | b/compiler/typecheck/TcDeriv.lhs index 7da30d19b..9b82ed6 100644 | --- a/compiler/typecheck/TcDeriv.lhs | +++ b/compiler/typecheck/TcDeriv.lhs | @@ -683,7 +683,8 @@ mkEqnHelp :: CtOrigin -> [TyVar] -> Class -> [Type] | -> Type | | mkEqnHelp orig tvs cls cls_tys tc_app mtheta | | Just (tycon, tc_args) <- tcSplitTyConApp_maybe tc_app | - , isAlgTyCon tycon -- Check for functions, primitive types etc | + , className cls == typeableClassName || isAlgTyCon tycon | + -- Avoid functions, primitive types, etc, unless it's Typeable | = mk_alg_eqn tycon tc_args | | otherwise | = failWithTc (derivingThingErr False cls cls_tys tc_app | | | | _______________________________________________ | ghc-commits mailing list | ghc-commits@haskell.org<mailto:ghc-commits@haskell.org> | http://www.haskell.org/mailman/listinfo/ghc-commits _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org<mailto:ghc-devs@haskell.org> http://www.haskell.org/mailman/listinfo/ghc-devs
Ok, done now. Cheers, Pedro On Thu, May 16, 2013 at 5:26 PM, Simon Peyton-Jones <simonpj@microsoft.com>wrote:
Oh, it’s easy. If you know what TyCons are defined in this file (and you do, in derivTyDecl), then find the TyCon, and then do****
[ promoted_dc | Just promoted_dc <- map promoteDataCon_maybe (tyConDataCons tc) ]****
** **
** **
Simon****
* *
*Microsoft Research Limited (company number 03369488) is registered in England and Wales*
*Registered office 21 Station Road, Cambridge, CB1 2FB ***
** **
*From:* josepedromagalhaes@gmail.com [mailto:josepedromagalhaes@gmail.com] *On Behalf Of *José Pedro Magalhães *Sent:* 16 May 2013 10:34 *To:* Simon Peyton-Jones *Cc:* ghc-devs@haskell.org *Subject:* Re: [commit: ghc] master: Allow deriving Typeable for more tycons (92191a3)****
** **
Hi Simon,
Yes. I still need to do some more work, though, because one thing is not yet working as I would like it to. Right now, if you define a datatype with -XDataKinds, you can derive Typeable for the promoted constructors:****
data N = Z | S N deriving Typeable -- for N deriving instance Typeable Z deriving instance Typeable S****
Note that the last two Typeable instances can only be given by standalone deriving. However, in case the user specifies -XAutoDeriveTypeable, I would expect all three instances to be unnecessary. Right now, however, we do not automatically derive Typeable instances for promoted constructors. This is because they are not tycl_decls (as in makeDerivSpecs in TcDeriv). What's the best way to easily get hold of all the promoted tycons in a module?
Thanks, Pedro****
On Wed, May 8, 2013 at 10:37 AM, Simon Peyton-Jones <simonpj@microsoft.com> wrote:****
Pedro
Surely should be some user-manual change to go with this?
Simon****
| -----Original Message----- | From: ghc-commits-bounces@haskell.org [mailto:ghc-commits- | bounces@haskell.org] On Behalf Of José Pedro Magalhães | Sent: 07 May 2013 13:27 | To: ghc-commits@haskell.org | Subject: [commit: ghc] master: Allow deriving Typeable for more tycons | (92191a3) | | Repository : http://darcs.haskell.org/ghc.git/ | | On branch : master | | https://github.com/ghc/ghc/commit/92191a39a59a036fde4de926e2e322a2c50c84 | cf | | >--------------------------------------------------------------- | | commit 92191a39a59a036fde4de926e2e322a2c50c84cf | Author: Jose Pedro Magalhaes <jpm@cs.ox.ac.uk> | Date: Tue May 7 09:16:29 2013 +0100 | | Allow deriving Typeable for more tycons | | >--------------------------------------------------------------- | | compiler/typecheck/TcDeriv.lhs | 3 ++- | 1 file changed, 2 insertions(+), 1 deletion(-) | | diff --git a/compiler/typecheck/TcDeriv.lhs | b/compiler/typecheck/TcDeriv.lhs index 7da30d19b..9b82ed6 100644 | --- a/compiler/typecheck/TcDeriv.lhs | +++ b/compiler/typecheck/TcDeriv.lhs | @@ -683,7 +683,8 @@ mkEqnHelp :: CtOrigin -> [TyVar] -> Class -> [Type] | -> Type | | mkEqnHelp orig tvs cls cls_tys tc_app mtheta | | Just (tycon, tc_args) <- tcSplitTyConApp_maybe tc_app | - , isAlgTyCon tycon -- Check for functions, primitive types etc | + , className cls == typeableClassName || isAlgTyCon tycon | + -- Avoid functions, primitive types, etc, unless it's Typeable | = mk_alg_eqn tycon tc_args | | otherwise | = failWithTc (derivingThingErr False cls cls_tys tc_app | | | | _______________________________________________ | ghc-commits mailing list | ghc-commits@haskell.org | http://www.haskell.org/mailman/listinfo/ghc-commits****
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs****
** **
participants (2)
-
José Pedro Magalhães -
Simon Peyton-Jones