2017-02-28 61 views
3

随着-XDuplicateRecordFields,下面是允许的:出口重复记录的字段

{-# LANGUAGE DuplicateRecordFields #-} 

module Baz(Foo(..), Bar(..)) where 
data Foo = Foo {qux :: Int}  
data Bar = Bar {qux :: String} 

但是,我得到一个编译错误时Foo模块FooBar中定义的模块Bar中定义:

{-# LANGUAGE DuplicateRecordFields #-} 

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

Conflicting exports for ‘qux’

我想我想要做的是equiv与第一个例子相同;数据类型最初定义的位置应该没有关系。 GHC 8支持这种事情吗?

+2

这可能是一个错误,你应该报告(https://ghc.haskell.org/trac/ghc/wiki/ReportABug)。 –

+1

这可能是实施的限制。通常这个扩展是需要的,因为你想在同一个模块中定义两个相同名字的字段。在不同的模块中这样做已经可以,因为可以使用合格的导入来消除歧义。 GHC开发人员可能根本没有考虑像上面那样的其他情况。 – chi

回答

0

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