Haskell cabal.project和nix building中的两个cabal包(lib及其示例prgs)

Haskell cabal.project和nix building中的两个cabal包(lib及其示例prgs),haskell,cabal,nix,Haskell,Cabal,Nix,我有一个haskell lib X,具有以下文件结构: X/src/libxfiles.hs X/default.nix X/shell.nix X/libx.nix X/libx.cabal X/cabal.project 及 cabal.project指向libx.cabal和example/example.cabal和cabal新建所有都在nix shell中工作。libx.nix文件中介绍了libx库和示例程序所需的haskell包 为什么是这种结构?因为示例程序有99%的通用代码,只

我有一个haskell lib X,具有以下文件结构:

X/src/libxfiles.hs
X/default.nix
X/shell.nix
X/libx.nix
X/libx.cabal
X/cabal.project

cabal.project指向libx.cabal和example/example.cabal和
cabal新建所有
都在nix shell中工作。libx.nix文件中介绍了libx库和示例程序所需的haskell包

为什么是这种结构?因为示例程序有99%的通用代码,只有几行依赖于ui(webkit2gtk等)。早期版本在example的main中有标志和CPP,并且
nix build
在result目录中生成了lib和example prg。在这个新设置中,当编译器是ghc并且我的目标是用ghc生成程序时,
cabal新构建
工作正常

早期的
nix build
使用ghcjs构建库及其一个示例程序。 目前,
nix build
只生成库。是否有可能在libx.nix或default.nix中也构建一个示例程序,比如ex1?也就是说,告诉构建过程
cabalnewbuildex1
,然后像安装lib一样安装结果

要使用ghcjs,要构建针对ghcjs的ex1,可以
nix shell--argstr“compiler”“ghcjs”
,然后
cabal new configure--ghcjs
等(因此,在nix shell之外,nix build-命令并没有完成我希望它完成的所有工作。)

是否需要将nix文件放入示例目录?不知何故,这听起来并不吸引人,因为libx.nix中已经给出了所需的模块。也就是说,我应该做一些类似于答案中的事情吗

或者github中是否有类似结构的haskell包可以作为示例

理想的解决方案是
nix build
将构建lib及其所有示例程序。这需要使用不同的建筑工具(ghc和GHCJ)。因此,可能的问题是,如何为多包cabal项目建立nix设置,其中各个包需要不同的环境,包括编译工具。在理想世界中,默认的nix构建将构建all,用户可以参数化nix构建以构建所选的一个或多个示例等

看来,讨论正在进行中 这两个问题可能有关联

X/example/lib/exampleCommon.hs
X/example/ex1/main.hs
X/example/ex2/main.hs
X/example/example.cabal