Why is the type not inferred?

Viewed 69
{-# 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.

0 Answers
Related