导出重复记录字段
Exporting duplicate record fields
对于 -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 支持这种功能吗?
我做了 post 个错误 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(..))
对于 -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 支持这种功能吗?
我做了 post 个错误 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(..))