Haskell 管理相关阴谋集团包的最佳实践是什么?

Haskell 管理相关阴谋集团包的最佳实践是什么?,haskell,packaging,cabal,Haskell,Packaging,Cabal,我正在使用Haskell编写一个基于数据流的优化库。现在看来,图书馆很可能要分成两部分: 具有最小构建依赖性的核心部件;称之为环芯 一个完整的片段,称之为hoopl,它可能对诸如预打印程序、快速检查等包有额外的依赖性 其想法是格拉斯哥哈斯克尔编译器将只依赖于hoopl core,因此引导编译器不会太困难。其他编译器将在hoopl中获得额外的好处。包装环将取决于环芯 Debian软件包工具可以从单个源代码树构建多个软件包。不幸的是。但肯定还有其他库或应用程序设计者存在类似问题(例如,一个包用于

我正在使用Haskell编写一个基于数据流的优化库。现在看来,图书馆很可能要分成两部分:

  • 具有最小构建依赖性的核心部件;称之为
    环芯

  • 一个完整的片段,称之为hoopl,它可能对诸如预打印程序、快速检查等包有额外的依赖性

其想法是格拉斯哥哈斯克尔编译器将只依赖于
hoopl core
,因此引导编译器不会太困难。其他编译器将在
hoopl
中获得额外的好处。包装
将取决于
环芯

Debian软件包工具可以从单个源代码树构建多个软件包。不幸的是。但肯定还有其他库或应用程序设计者存在类似问题(例如,一个包用于核心库,另一个包用于命令行界面,另一个包用于GUI界面)


使用Cabal构建和管理多个相关Haskell包的当前最佳实践是什么?

将这两个包放在源代码管理repo的单独子目录中,并使用两个单独的Cabal文件


确保在移动文件时使用源代码管理系统的移动操作,以便它正确跟踪历史记录。

我会将这两个包放在不同的子目录中,并有一个
Makefile
,如下所示:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace
这假设您已经通过首先构建hoopl核心并注册它(
--inplace
),然后构建
hoopl
来引导流程。您可以使用Makefile自动执行更多操作


正如您所知,当我们希望GHC具有类似的功能时,我们编写了自己的构建系统;-)我不建议这样做。从技术上讲,我认为可以从GHC构建系统中提取所需的部分,并制作一个可重用的框架,尽管……

CHP库最近分成两部分。作者在会上分享了一些想法。不确定这是否回答了您的问题。相关:(正如诺曼所知,因为他刚刚在那里发布了一个答案:-)除了每次我尝试构建
hoopl
时都要记住安装
hoopl
,还有什么方法来管理依赖关系吗?hoopl不依赖hoopl core吗(例如,阴谋集团安装将解决构建链问题?)唐:它不会从本地副本中解析它,不过这通常是你想要的。诺曼:我不知道有什么好办法可以自动处理。一种选择是对hoopl的cabal文件使用标志或临时更改,该文件包括搜索路径上的hoopl核心源,因此它会自动合并它们,而无需使用包机制。不过,在上传之前,您需要确保构建时没有使用该标志,以检查hoopl core中是否有暴露的模块。@Don Yes,hoopl肯定取决于hoopl core。但我想不出一个简单的方法来强迫我的mkfile在需要的时候在构建hoopl之前安装hoopl-core@甘尼什感谢你的建议;让我们看看是否还有其他想法……注册-就位看起来就像是一张票,谢谢。我保证不写我自己的构建系统,除非我能得到授权;-)