[Haskell-cafe] Useful IDE features - "implement instance"

peterv bf3 at telenet.be
Tue Jun 19 03:01:27 EDT 2007


Hi Bulat,

Yes, that's what I had to do when using assembler in the 19080s, but it was
nice to get rid of that when using C/C++ or any other imperative/OO language
that I'm aware of. 

You see, for someone with an imperative/OO background, the Haskell record
restriction on field names looks incredibly dumb. 

But when using type classes to encapsulate the fields makes each function
polymorphic on any record that implements these field wrappers, thus
enhancing abstraction. Type inference helps a lot here, otherwise one would
have to type each constraint in the signature of the function, which is a
pain (forgive me if I'm using incorrect terms here, I come from the OO
world...) Personally I like that, but that's a question of taste I guess.

Peter

-----Original Message-----
From: Bulat Ziganshin [mailto:bulat.ziganshin at gmail.com] 
Sent: Tuesday, June 19, 2007 8:39 AM
To: peterv
Cc: 'Claus Reinke'; haskell-cafe at haskell.org
Subject: Re[2]: [Haskell-cafe] Useful IDE features - "implement instance"

Hello peterv,

Monday, June 18, 2007, 6:44:06 PM, you wrote:
> Just another wild idea which I might find useful, but is more like
> refactoring, is to convert the fields of a record to get/set type-classes,
> and refactor all usages of those fields.

i never done such refactoring. just use different names for fields. a
rule of thumb is including of record name in field names:

data PackedFilePath = PackedFilePath
  { fpPackedDirectory       :: !MyPackedString
  , fpPackedBasename        :: !MyPackedString
  , fpLCExtension           :: !String
  , fpHash   :: {-# UNPACK #-} !Int32
  , fpParent                :: !PackedFilePath
  }                                                 
  | RootDir                                         

data FileInfo = FileInfo
  { fiFilteredName         :: !PackedFilePath  
  , fiDiskName             :: !PackedFilePath  
  , fiStoredName           :: !PackedFilePath  
  , fiSize  :: {-# UNPACK #-} !FileSize        
  , fiTime  :: {-# UNPACK #-} !FileTime        
  , fiIsDir :: {-# UNPACK #-} !Bool            
  }                                            

  


-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com




More information about the Haskell-Cafe mailing list