gpt4 book ai didi

haskell - 在 Haskell 模块中插入目录的更好方法

转载 作者:行者123 更新时间:2023-12-02 05:58:56 25 4
gpt4 key购买 nike

我正在用 Haskell 编写一个(实际上是我的第一个)大型程序,并尝试将我的程序分解为模块,以便它更容易维护。在 Haskell 中,模块名称似乎依赖于目录结构。这完全没问题,直到我必须为程序嵌入另一层目录结构。下面我将给出一个非常简单的例子:

假设我们从具有以下目录结构的 Haskell 程序开始。

  • [方括号]中的名称代表目录,
  • {大括号}中的名称代表模块,
  • (普通括号)中的名称表示模块内关联的文件名
[src]
- (Main.hs) {Main}
- (PRBS.hs) {PRBS}
- [Hardware]
- (DataDef.hs) {Hardware.DataDef}
- (ShiftRegister.hs) {Hardware.ShiftRegister}

这一切都很好。我可以将任何我想要的东西导入到任何我想要的地方。但是,现在假设我想创建另一个抽象级别,如下所示:

[src]
- (Main.hs) {Main}
- [Firmware]
- (PRBS.hs) {Firmware.PRBS}
- [Hardware]
- (DataDef.hs) {Firmware.Hardware.DataDef}
- (ShiftRegister.hs) {Firmware.Hardware.ShiftRegister}

现在请注意,硬件中所有模块的名称都已更改。我现在必须更改每个文件以及导入文件的所有其他文件中的模块名称。我仅在示例中显示了三个文件。如果目录结构最终有数百个文件和数十个嵌入目录,那么维护代码可能变得不可能。此外,如果在任何时候,我想复制一个目录(及其当前目录系统中特定点的子目录),我需要找出它之前的所有先前目录,并手动更改每个目录中的模块名称文件。

由于 Haskell 在几个大型项目中使用,我非常确定我在这里遗漏了一些东西。任何帮助我摆脱困境的帮助将不胜感激!

最佳答案

如果你有 perl 和 bash 以及 find 等等,你可以这样做:

find Firmware/Hardware/ -name '*.hs' -exec perl -i.bak -pe \
's/^module (Hardware\.\S+)/module Firmware.$1/' \
{} \;
diff Firmware/Hardware/DataRef.hs{,.bak}

关于haskell - 在 Haskell 模块中插入目录的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com