再出口合格?

Len*_*low 26 syntax haskell module

假设你有两个模块,比如

module Foo.A where

foo = 42
Run Code Online (Sandbox Code Playgroud)

module Foo.B where

foo = 12
Run Code Online (Sandbox Code Playgroud)

你想写一个超级模块

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

import Foo.A
import Foo.B
Run Code Online (Sandbox Code Playgroud)

重新导出这些模块,你会得到一个名字冲突.

这有解决方案吗?

Max*_*oke 27

基本上没有.这是Gtk2hs作者等人们长期提出的功能要求.Gtk2hs有一个非常广泛的模块层次结构,它可能对两者都有意义:

  • 在几个不同的模块中使用相同的名称(例如,Graphics.UI.Gtk.Buttons.Button和Graphics.UI.Gtk.Buttons.CheckButton中的newButton)
  • 使用单个import语句为用户提供导入所有这些模块的便利

目前,如果您想要将多个模块重新出口,您可以做的就是:

  • 避免重复使用要重新导出的模块中的名称
  • 在适当的情况下,使用类型类允许将相同的名称用于多个不同的目的

  • 模块的工作方式可以说是Haskell中最薄弱的一点.他们留下了很多不足之处,这是一个例子. (13认同)
  • 您是否有任何机会指向该功能请求的链接? (3认同)

mus*_*iKk 12

好问题.Haskell报告解决了这个问题:

导出列表是累积的:导出列表导出的实体集是由列表的各个项导出的实体的并集.

[...]

模块导出的实体的非限定名称必须都是不同的(在它们各自的命名空间内).

根据我有限的Haskell知识,我会说这是不可能的.