使用-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是否支持这种事情?
答案 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(..))