On Thu, Nov 11, 2010 at 03:17:39PM +0200, Michael Snoyman wrote: > data PetOwner > data FurnitureOwner > > data Cat = Cat { owner :: PetOwner } > data Chair = Chair { owner :: FurnitureOwner }
These are clearly related uses, so as I said, you can use a type class to overload the accessor name in a controlled fashion. {-# LANGUAGE EmptyDataDecls, MultiParamTypeClasses, FunctionalDependencies #-} data PetOwner data FurnitureOwner data Cat = Cat { catOwner :: PetOwner } data Chair = Chair { chairOwner :: FurnitureOwner } class Owned a b | a -> b where owner :: a -> b instance Owned Cat PetOwner where owner = catOwner instance Owned Chair FurnitureOwner where owner = chairOwner (You can also use associated type families for the same effect.) Lauri _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe