You're right, if you implement the type class independent of the value you'll end up with associating names with types.

I use it as an interface to your method actually - sorry I didn't make it clear enough.

So, something like this:

data NamedInt = NamedInt Int String

instance HasName NamedInt where
    name (NamedInt _ n) = n
    updateName n (NamedInt v _) = NamedInt v n

Now, if you want, you can have a Num instance for Named Int, redirect everything to the inner-int, and here you go. You can use NamedInt as a Num seamlessly.

Cheers,

On 20 March 2010 11:03, Stephen Tetley <stephen.tetley@gmail.com> wrote:
Hi Ozgur

Doesn't that associate names with types rather than names with values though:

instance HasName Int where
 name = "Int"


> printWithName (1::Int)
Int: 1

> printWithName (70::Int)
Int: 70

I think the same is achievable with Data.Typeable / Data.Data although
how to do it is somewhat buried...

For associating names and values you'd still need to do it 'by hand'
with something like

data Named a = Named String a
 deriving (Show)

or

type Named a = (String,a)

Best wishes

Stephen
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners



--
Ozgur Akgun