{-# 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
Почему fld
неоднозначно? Foo -> Int
и Baz -> Int
- это разные типы. Я думал, что gh c может вывести аргумент fld
из типа foo
.