Changes to Typeable

Emil Axelsson emax at
Mon Oct 15 07:58:12 CEST 2012

2012-10-14 14:34, Gábor Lehel skrev:
> So apologies for constantly suggesting new things, but if we have,
> - All Typeable instances for type constructors are generated by the
> compiler, and
> - All Typeable instances for composite types (if that's the word?) are
> via instance (Typeable f, Typeable a) => Typeable (f a), and
> - User-written instances, and therefore overlap, are disallowed,
> how difficult would it be to add:
> foo :: Typeable (f a) => Dict (Typeable f, Typeable a)
> -- data Dict c where Dict :: c => Dict c
> i.e. to make it possible to go in the other direction, and deduce that
> if a composite type is Typeable, its components must also be?
> (alternate encoding: foo :: Typeable (f a) => ((Typeable f, Typeable
> a) => r) -> r)
> Use case: nothing very serious, if it would take significant work,
> it's not worth it.

I have a use case:

This is a reimplementation of Data.Dynamic to support casting type `a` 
to `Dynamic` given a constraint `Typeable (a -> b)`:

   toDyn :: Typeable (a -> b) => P (a -> b) -> a -> Dynamic

With your suggestion, it seems I should be able to use the ordinary 
Data.Dynamic instead.

/ Emil

More information about the Libraries mailing list