导出重复记录字段

Exporting duplicate record fields

对于 -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 支持这种功能吗?

我做了 post 个错误 here。不过,我也无意中发现了一个解决方法:

如果我将编译指示放在 Foo.hs 或 Bar.hs 中,GHC 会接受该程序。即编译如下:

{-# LANGUAGE DuplicateRecordFields #-}
module Foo(Foo(..)) where
data Foo = Foo {qux::Int}

module Bar(Bar(..)) where
data Bar = Bar {qux::String}

module Baz(Foo(..),Bar(..)) where
import Foo (Foo(..))
import Bar (Bar(..))