导出重复记录字段

cro*_*eea 5 haskell ghc

使用-XDuplicateRecordFields,允许以下内容:

{-# LANGUAGE DuplicateRecordFields #-}

module Baz(Foo(..), Bar(..)) where
data Foo = Foo {qux :: Int}    
data Bar = Bar {qux :: String}
Run Code Online (Sandbox Code Playgroud)

但是,Foo在模块中定义Foo并在模块Bar中定义时出现编译错误Bar

{-# LANGUAGE DuplicateRecordFields #-}

module Baz(Foo(..), Bar(..)) where
import Foo (Foo(..))
import Bar (Bar(..))
Run Code Online (Sandbox Code Playgroud)

Conflicting exports for ‘qux’

我认为我正在尝试做的相当于第一个示例;最初定义数据类型的位置无关紧要。GHC 8 支持这种功能吗?

cro*_*eea 2

我确实在这里发布了一个错误。不过,我也无意中发现了一个解决方法:

如果我将编译指示放入 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(..))
Run Code Online (Sandbox Code Playgroud)