Haskell 弗雷格是否解决了“自由贸易”的问题;转口合格“;哈斯克尔?

Haskell 弗雷格是否解决了“自由贸易”的问题;转口合格“;哈斯克尔?,haskell,frege,Haskell,Frege,哈斯克尔的问题是: 及 module Foo.B where foo = 12 你想写一个超级模块 module Foo ( module Foo.A , module Foo.B ) where import Foo.A import Foo.B 如果重新导出这些模块,则会出现名称冲突 注意,在每个模块(foo1、foo2等)中可以有大量的函数,比如foo,我想从这两个模块中使用它们。毕竟,每个模块中也可能有具有相同成员名称的数据。所以隐藏不是解决办法。 我

哈斯克尔的问题是:

module Foo.B where

foo = 12
你想写一个超级模块

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

import Foo.A
import Foo.B
如果重新导出这些模块,则会出现名称冲突

注意,在每个模块(foo1、foo2等)中可以有大量的函数,比如
foo
,我想从这两个模块中使用它们。毕竟,每个模块中也可能有具有相同成员名称的
数据。所以隐藏不是解决办法。
我做<强>不/强>考虑透镜来解决它。


现在,Frege是否解决了Haskell的“转口合格”问题?如果我没记错的话,似乎是的,但我现在找不到证据,有人能详细说明一下吗?

我想没有。在Frege中,模块只能重新导出项(即函数、类型、类型类),而不能重新导出模块

这意味着,如果在要导入的模块层次结构中有一些
foo
s,则仍然需要隐藏所有,最多只隐藏一个

在弗雷格,你可以做的是:

import mod.A(foo fooA)
import mod.B(foo fooB)
它有效地将导入模块中的
A.foo
重命名为
fooA
,将
B.foo
重命名为
fooB
。这也适用于转口贸易。例如,在《弗雷格序曲》中

import Prelude.PreludeBase public(!= /=)
这将导致任何导入
frege.Prelude
的人都可以使用操作员
/=
。但这只是
的别名=作战需求文件的操作员


可以想象,我们需要两者都有
=
/=
以分别避免来自Java或Haskell营地的投诉

我想没有。在Frege中,模块只能重新导出项(即函数、类型、类型类),而不能重新导出模块

这意味着,如果在要导入的模块层次结构中有一些
foo
s,则仍然需要隐藏所有,最多只隐藏一个

在弗雷格,你可以做的是:

import mod.A(foo fooA)
import mod.B(foo fooB)
它有效地将导入模块中的
A.foo
重命名为
fooA
,将
B.foo
重命名为
fooB
。这也适用于转口贸易。例如,在《弗雷格序曲》中

import Prelude.PreludeBase public(!= /=)
这将导致任何导入
frege.Prelude
的人都可以使用操作员
/=
。但这只是
的别名=作战需求文件的操作员

可以想象,我们需要两者都有
=
/=
以分别避免来自Java或Haskell营地的投诉