One reason for favoring the Proxy# a style over the Tagged style is almost any manipulation of the Tagged variant requires ScopedTypeVariables and a very awkward programming style, while a 0-width proxy can be passed around like an explicit type application. Otherwise they are largely equivalent if you're careful about how the low level definitions work. As the original author of both, I'm not personally wedded to either the Tagged or the Proxy style, but I find in practice the Proxy version leads to much prettier code that is easier to follow. -Edward On Mon, Mar 10, 2014 at 6:35 AM, Roman Cheplyaka <roma@ro-che.info> wrote:
Ok, one reason is that the TypeRep won't be cached in the Dynamic value. Even in GHC 7.8 Typeable is defined as
class Typeable a where typeRep# :: Proxy# a -> TypeRep
instead of
class Typeable a where typeRep :: Tagged a TypeRep
Why? Is this an oversight?
* Roman Cheplyaka <roma@ro-che.info> [2014-03-10 12:11:27+0200]
In Data.Dynamic, Dynamic is defined as
data Dynamic = Dynamic TypeRep Any
Does this have any advantage over a safer
data Dynamic = forall a. Typeable a => Dynamic a
?
Roman
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries