Почему тип не выводится? - PullRequest
3 голосов
/ 22 марта 2020
{-# 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...