
4 Jan
2009
4 Jan
'09
4:15 a.m.
On 4 Jan 2009, at 07:11, Thomas DuBuisson wrote:
My proposal would be for each selector name to be a special type of "phantom" type class (existing in the intermediate language only). This type class would not be accessible by the programmer and thus s/he couldn't make a polymorphic function for which specialization would be needed. In other words - in normal circumstances there is no need for dictionaries and thus no run-time difference between this method and using different record names.
Example:
data IPv4Hdr = Hdr4 { src, dst :: IPv4 } data IPv6Hdr = Hdr6 { src, dst :: IPv6 }
At some intermediate stage you'd see:
class Src h s where src :: h -> s class Dst h d where dst :: h -> d
class Src h s | h -> s