Hello, I like Bas's variation on the design (except, perhaps, for the name "Tagged" ;) It captures exactly what we are trying to do: the dictionary for Typeable becomes simply the run-time representation of the type. Coincidentally, this is exactly the same as what I am using to link value level numbers/strings to type-level numbers/symbols, on the type-nats branch of GHC. I wonder if it might make sense to unify the two designs? -Iavor PS: I wouldn't worry too much about breaking existing code, as long as derived Typeable instances continue to work---I never provide custom ones and, in fact, I think that GHC should no allow them or, at least, give a stern warning when it sees one. On Fri, Feb 10, 2012 at 4:35 PM, Bas van Dijk <v.dijk.bas@gmail.com> wrote:
Or don't use an argument at all:
class Typeable t where typeRep :: Tagged t TypeRep
newtype Tagged s b = Tagged { unTagged :: b }