首页 > 解决方案 > 为什么没有推断出类型?

问题描述

{-# 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是不同的类型。我认为ghc可以fldfoo.

标签: haskelltype-inferenceambiguous

解决方案


推荐阅读