一个多模式Haskell可执行文件与共享库的单独可执行文件

一个多模式Haskell可执行文件与共享库的单独可执行文件,haskell,cabal,Haskell,Cabal,我现在正在做一个项目,在这个项目中,我将cabal文件配置为构建多个可执行文件,这些文件共享由同一cabal文件构建的库。cabal项目的结构非常类似,一个库部分,然后是几个可执行部分,这些部分在其构建部分中包含该库 我使用这种方法是为了使公共函数可用于任意数量的可执行文件,并根据需要轻松创建更多的可执行文件 然而,Neil Mitchell在其第33页中主张将Haskell项目捆绑到一个具有多种模式的可执行文件中(例如,通过使用Neil Mitchell的CmdArgs库),因此可能有一种模式

我现在正在做一个项目,在这个项目中,我将cabal文件配置为构建多个可执行文件,这些文件共享由同一cabal文件构建的库。cabal项目的结构非常类似,一个
部分,然后是几个
可执行
部分,这些部分在其
构建部分中包含该库

我使用这种方法是为了使公共函数可用于任意数量的可执行文件,并根据需要轻松创建更多的可执行文件

然而,Neil Mitchell在其第33页中主张将Haskell项目捆绑到一个具有多种模式的可执行文件中(例如,通过使用Neil Mitchell的CmdArgs库),因此可能有一种模式启动web服务器,另一种模式从命令行查询数据库,等等。引用:

提供一个可执行文件

版本3有四个可执行程序——一个用于生成排名 信息,一个做命令行搜索,一个做web 搜索,一个做回归测试。版本4有一个 可执行文件,可执行上述所有和更多操作,由FLAGS控制。 只提供一个终端程序有很多好处——it 减少了代码在没有注意到的情况下被破坏的可能性,这使得 通过不复制Haskell运行时系统,总文件大小更小, 它减少了用户需要学习的命令数量。迁移到 一个多用途的可执行文件似乎是一个共同的主题,它是什么工具 例如DARC和hpc都基于一个命令和多个命令 模式


单个多模式可执行文件真的是更好的方法吗?是否有相反的理由坚持使用共享同一库的不同可执行文件?

就我个人而言,我更喜欢Unix哲学“编写做一件事并且做得很好的程序”。然而,这两种方式都有原因,所以这里唯一合理的答案是:视情况而定

将所有内容捆绑到同一个可执行文件中有意义的一个例子是,当您针对一个资源非常有限的平台(例如,嵌入式系统)时。这就是我们所采取的方法

另一方面,如果您将其划分为多个可执行文件,那么您就可以让您的客户机选择只使用那些对他们重要的文件。如果只有一个可执行文件,即使你的客户真的只需要一个功能,他也无法摆脱额外的负担

我敢肯定,无论采取哪种方式,都有更多的理由,但这只是表明,没有明确的答案。这取决于用例