[Haskell-cafe] Proposal: Polymorphic typeclass and Records

Wvv vitea3v at rambler.ru
Wed Aug 28 22:05:35 CEST 2013

Let we have data in one module as this:

	data Person  = Person  { personId :: Int, name :: String }
	data Address a = Address { personId :: Int, address :: String , way :: a}

It was discussed a lot in topics "OverloadedRecordFields"

This is an alternative:
Let we have polymorphic typeclass:

          class Record{f} a b | a -> b where
	      f :: a -> b

so, compiler could create instances for our data as:

	instance Record{personId} Person Int where
		personId (Person x _) = x

	instance Record{personId} (Address a) Int where
		personId (Address x _ _) = x	

	instance Record{way} (Address Int) Int where
		way (Address _ _ x) = x	

and we could use this:

        p:: Record {personId} r Int => r -> Int
        p = personId

What do you think about this?

View this message in context: http://haskell.1045720.n5.nabble.com/Proposal-Polymorphic-typeclass-and-Records-tp5735096.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

More information about the Haskell-Cafe mailing list