[commit: ghc] master: Allow deriving Typeable for more tycons (92191a3)
José Pedro Magalhães
jpm at cs.uu.nl
Thu May 16 11:33:54 CEST 2013
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 at microsoft.com>wrote:
> Pedro
>
> Surely should be some user-manual change to go with this?
>
> Simon
>
> | -----Original Message-----
> | From: ghc-commits-bounces at haskell.org [mailto:ghc-commits-
> | bounces at haskell.org] On Behalf Of José Pedro Magalhães
> | Sent: 07 May 2013 13:27
> | To: ghc-commits at 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 at 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 at haskell.org
> | http://www.haskell.org/mailman/listinfo/ghc-commits
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130516/05895c94/attachment.htm>
More information about the ghc-devs
mailing list