2017-02-28 101 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(..))