In a typical OO language, eg, Python, you'd do:
class Foo(object):
def __init__(self, bar):
self.bar = bar
foo = Foo("bar")
# prints 'bar'
print foo.bar
In Haskell: data Foo = Foo { bar :: String }
main = do
let foo = Foo "bar"
-- prints 'bar'
putStrLn (bar foo)
Here, you can see that Haskell generates an accessor 'bar' which is a top-level function. Which means that if you can't have two records with a 'bar' field in the same module. You can have a 'bar' field in a different module, but then you need to a qualified import (import qualified OtherModule as O) in order to work around the conflict (forcing you to type ugly O.bar every time you need the 'bar' accessor from OtherModule). So you end up putting prefixes everywhere, something which in my opinion is a design mistake.