On 30 December 2010 17:23, Markus Läll <markus.l2ll@gmail.com> wrote:
Yes, they are in the global scope, and from what I gather: they are just regular functions, created by special syntax.

There are a few obvious solutions (some of which you might have thought yourself :-):
 - rename the accessor or the other function, or
 - put the data declaration or the other function in another module and import qualified, or
 - write a typeclass with a 'name' function and fit the non-accessor function 'name' somehow into that...

I think the best approach is the modular one, but this really depends on what you are doing.


Okay looks like name mangling with the datatypes name is in order then. Something like :-

    data Test 
        = Test {
            testName :: String,
            testValue :: Int
        }
 
Thanks,

Aaron

--
Markus Läll

On Thu, Dec 30, 2010 at 7:01 PM, Aaron Gray <aaronngray.lists@gmail.com> wrote:
Given a Haskell "record type" :-

    data Test 
        = Test {
            name :: String,
            value :: Int
        }

    test = Test {
            name = "test",
    value = 1
        }

    main :: IO ()
    main = do
        putStrLn (name test)

Are "name" and "value" in the global name space, as the following gives an error "Multiple declarations of `name'" :-

    name :: String -> String
    name s = s

Is there any way round this ?

Many thanks in advance,

Aaron


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe