【问题标题】:Exporting duplicate record fields导出重复记录字段
【发布时间】:2017-02-28 05:48:22
【问题描述】:

使用-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 支持这种东西吗?

【问题讨论】:

  • 这很可能是一个错误,你should report
  • 这可能是实现的限制。通常需要此扩展,因为您想在同一模块中定义两个同名字段。在不同的模块中这样做已经可以了,因为可以使用合格的导入来消除歧义。 GHC 开发人员可能根本没有考虑上述其他情况。

标签: haskell ghc


【解决方案1】:

我确实发布了一个错误here。不过,我也无意中发现了一个解决方法:

如果我将 pragma 放入任一 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(..))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2013-12-29
    • 2020-07-24
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多