导出重复记录字段

时间:2017-02-28 05:48:23

标签: haskell ghc

使用-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是否支持这种事情?

1 个答案:

答案 0 :(得分:1)

我发布了一个错误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(..))