[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