使用-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 支持这种功能吗?
我确实在这里发布了一个错误。不过,我也无意中发现了一个解决方法:
如果我将编译指示放入 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)