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营地的投诉