{-# LANGUAGE DuplicateRecordFields #-}
data Foo = Foo {fld::Int}
data Bar = Bar {foo::Foo}
data Baz = Baz {fld::Int}
getFldFromFoo :: Foo -> Int
getFldFromFoo = fld -- ok
getFldFromBaz :: Baz -> Int
getFldFromBaz = fld -- ok
getFldFromBar :: Bar -> Int
getFldFromBar = fld . foo -- error: Ambiguous occurrence ‘fld’
-- getFldFromBar = (fld :: Foo -> Int) . foo -- ok
Why is fld ambigous? Foo -> Int and Baz -> Int are different types.
I thought that ghc can inferred the argument of fld from the type of foo.