【问题标题】:Does Frege solve the issue of "re-export qualified" of Haskell?Frege是否解决了Haskell的“再出口合格”问题?
【发布时间】:2016-01-31 09:32:45
【问题描述】:

Haskell 中的问题:

module Foo.A where

foo = 42

module Foo.B where

foo = 12

你想写一个超级模块

module Foo (
      module Foo.A
    , module Foo.B
    ) where

import Foo.A
import Foo.B

重新导出这些模块,您会遇到名称冲突。

注意,每个模块(foo1、foo2 等)中可能有很多函数,如 foo,我想在两个模块中都使用它们。毕竟,每个模块中也可以存在具有相同成员名称的datas。所以隐藏不是解决办法。 我确实考虑使用 Lens 来解决它。

现在,弗雷格解决了Haskell“再出口合格”的问题吗?如果我没记错的话似乎是这样,但我现在找不到证据,谁能详细说明一下?

【问题讨论】:

    标签: haskell frege


    【解决方案1】:

    我猜不是。在 Frege 中,模块只能重新导出项目(即函数、类型、类型类),但不能重新导出模块。

    这意味着,如果您正在导入的模块层次结构中有一些foos,您仍然需要隐藏所有内容,最多只能隐藏一个。

    你可以在弗雷格做的是:

    import mod.A(foo fooA)
    import mod.B(foo fooB)
    

    在导入模块中有效地将 A.foo 重命名为 fooAB.foo 重命名为 fooB。这也适用于再出口。例如,在frege.Prelude 我们有

    import Prelude.PreludeBase public(!= /=)
    

    这将导致导入frege.Prelude 的任何人都可以使用运算符/=。但这只是Ord!=运算符的别名

    可以想象,我们需要同时拥有 !=/= 以避免分别来自 Java 或 Haskell 阵营的投诉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2010-12-13
      • 2013-03-30
      相关资源
      最近更新 更多