
Isaac Dupree
writes: On 02/24/10 13:40, Martijn van Steenbergen wrote: Ian Lynagh wrote:
I have a feeling I'm in the minority, but I find record punning an ugly feature.
Given data T = C { f :: Int } we implicitly get f :: T -> Int which punning shadows with f :: Int whereas I generally avoid shadowing completely.
I agree with Ian.
I tend to agree.
<snip>
-Isaac
(I know how you're always looking for things to take out of Haskell ...) I can see the ugliness of having a name with two incompatible types (especially in the same scope). I wonder: if a programmer from Mars landed into Haskell a la GHC 2010 (that is, unburdened by history back to v1.3), wouldn't it be the scare-quotes 'implicit' field selector that seems the odd man out? After all, the program text declares { f :: Int }, and in all uses of the field label apart from selecting, it _is_ an Int. Where does this function thing come from? By the way, it seems you can arrive at the same level of confusion like this (declared in a distinct scope):
f (C { f }) = f -- f :: T -> Int
- Anthony