我该如何管理一个Haskell程序的多个配置?

5
在Haskell世界中,自动工具的替代方案是什么?我希望能够在同一源代码的不同配置之间进行选择。
例如,在Haskell中至少有两种MD5实现:Data.Digest.OpenSSL.MD5Data.Digest.Pure.MD5。我希望以这样的方式编写代码,使其能够确定哪个库已经安装,并且不需要安装其他库。
在C语言中,我可以使用Autotools/Scons/CMake + cpp。在Python中,我可以捕获ImportError。在Haskell中应该使用哪些工具呢?

谢谢,Norman,这是更好的标题。 - sastanin
2个回答

14

Haskell中使用Cabal配置。在项目的顶层目录中,放置一个扩展名为 .cabal 的文件,例如<yourprojectname>.cabal。文件内容大致如下:

Name:                myfancypackage
Version:             0.0
Description:         myfancypackage
License:             BSD3
License-file:        LICENSE
Author:              John Doe
Maintainer:          john@example.com
Build-Type:          Simple
Cabal-Version:       >=1.4

Flag pure-haskell-md5
  Description: Choose the purely Haskell MD5 implementation
  Default: False

Executable haq
  Main-is:           Haq.hs
  Build-Depends:     base-4.*
  if flag(pure-haskell-md5)
    Build-Depends:   pureMD5-0.2.*
  else
    Build-Depends:   hopenssl-1.1.*

请参阅Cabal文档,特别是有关配置的部分。


谢谢!这正是我在寻找的答案。根据我的理解,我需要使用CC选项和cpp,对吧? - sastanin
1
没错,它被称为CPP-optionsCC是C编译器。您还需要使用cabal构建项目。请查看我的一个项目中的Makefile和.cabal文件:Scion。此外,您需要在相关文件中添加{-# LANGUAGE CPP #-} - nominolo

2
正如nominolo所说,Cabal是要使用的工具。特别是“configurations”语法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接