haskell - 在相同类型的字段选择器上引发的无歧义字段

ubof19bj  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(121)

我刚刚将一个项目更新到GHC 9.2.4,一些模块引发了ambiguous-fields警告。
在阅读有关-XDuplicateRecordFields的内容时,我了解到在将其用作选择器时,有必要消除不同类型中相同字段名的歧义。
但这部法典:

import Data.Aeson

customDefaultOptions :: Options
customDefaultOptions = defaultOptions {omitNothingFields = True}

newtypeOptions :: Options
newtypeOptions = customDefaultOptions {unwrapUnaryRecords = True}

也引出了这一点:

The record update customDefaultOptions
                        {unwrapUnaryRecords = True} with type Options is ambiguous.
    This will not be supported by -XDuplicateRecordFields in future releases of GHC.
   |
 7 | newtypeOptions = customDefaultOptions {unwrapUnaryRecords = True}
   |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^

然而,customDefaultOptions的类型是Options,就像defaultOptions一样,哪里有歧义?

1cosmwyk

1cosmwyk1#

多亏了K. A. Buhr,我发现openapi3公开了一个非常相似的结构。
在字段前面加上模块名称,以消除歧义:

import qualified Data.Aeson as Aeson

newtypeOptions :: Options
newtypeOptions = customDefaultOptions {Aeson.unwrapUnaryRecords = True}

相关问题