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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe