{-# LANGUAGE DuplicateRecordFields #-} data Foo = Foo {value1 :: Integer, value2 :: Integer, value3 :: Integer} data Bar = Bar {value1 :: Integer, value2 :: Integer, value3 :: Integer} -- value1 type inferred boo = value1 (undefined :: Foo) -- value1 type not inferred baz = fmap ($ (undefined :: Foo)) [value1, value2, value3] ---------------------------------- --Ambiguous occurrence ‘value1’ -- It could refer to -- either the field ‘value1’, -- defined at ... -- or the field ‘value1’, -- defined at ...