a plausable workaround in haskell 98 is to use a typeclass like so

class EdgyNodelike a where
        node :: a -> Int
        edge0 :: a -> a
        edge1 :: a -> a

instance EdgyNodelike BFSM where
        node = bfsmnode
        edge0 = bfsmedge0
        edge1 = bfsmedge1

instance EdgyNodelike BMC where
        node = bmcnode
        edge0 = bmcedge0
        edge1 = bmcedge1


that will let you write code which works on anything with edges or
nodes. 
        John

On Tue, Jan 07, 2003 at 10:01:38PM -0600, Kim-Ee Yeoh wrote:
> Dear Haskellers,
> 
> Why can't field labels have the same name in different types?
> 
> Here's some actual code on finite state automata I'm working on:
> 
> > data BMC
> >   = BMC { node      :: !Int, 
> >           threshold :: !Float, 
> >           edge0     :: BMC, 
> >           edge1     :: BMC }
> 
> > data BFSM
> >   = BFSM { bfsmnode      :: !Int,
> >            bfsmstate     :: Maybe Bool,
> >            bfsmoutput    :: [Bool],
> >            bfsmedge0     :: BFSM, 
> >            bfsmedge1     :: BFSM }
> 
> What I really want is to use the same field labels of node, edge0, and 
> edge1 in the BFSM type, but I can't because otherwise I get the following
> in hugs:
> 
> ERROR xxx - Repeated definition for selector "edge0"
> 
> I'm not an expert on programming languages, but doesn't it seem
> that Haskell, as a strongly-typed language, should not have any problem 
> distinguishing the field labels of different datatypes?
> 
> 
> Kim-Ee
> 
> 
> _______________________________________________
> Haskell mailing list
> [EMAIL PROTECTED]
> http://www.haskell.org/mailman/listinfo/haskell
> 

-- 
---------------------------------------------------------------------------
John Meacham - California Institute of Technology, Alum. - [EMAIL PROTECTED]
---------------------------------------------------------------------------
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to