【发布时间】:2017-02-28 05:48:22
【问题描述】:
使用-XDuplicateRecordFields,允许以下操作:
{-# LANGUAGE DuplicateRecordFields #-}
module Baz(Foo(..), Bar(..)) where
data Foo = Foo {qux :: Int}
data Bar = Bar {qux :: String}
但是,当Foo 在模块Foo 中定义并且Bar 在模块Bar 中定义时,我得到一个编译错误:
{-# LANGUAGE DuplicateRecordFields #-}
module Baz(Foo(..), Bar(..)) where
import Foo (Foo(..))
import Bar (Bar(..))
Conflicting exports for ‘qux’
我认为我正在尝试做的与第一个示例相同;最初定义数据类型的位置无关紧要。 GHC 8 支持这种东西吗?
【问题讨论】:
-
这很可能是一个错误,你should report。
-
这可能是实现的限制。通常需要此扩展,因为您想在同一模块中定义两个同名字段。在不同的模块中这样做已经可以了,因为可以使用合格的导入来消除歧义。 GHC 开发人员可能根本没有考虑上述其他情况。