Haskell中的多平台开发



我需要让程序的一些小块在不同的平台上表现得不同。GHC似乎不太擅长交叉编译,所以我计划在Linux和Windows上编译相同的代码。

建议用什么方法来实现这一点?我是否必须编写一个模块的多个版本,或者有一些类似预处理器指令的东西可以放入我的代码中,以有条件地编译一个或另一个代码块?

附言:我使用GHC和Cabal进行管理

GHC支持通过C预处理器运行代码。这不是一个非常Haskelly的解决方案,但它是在实践中必要时使用的。

编辑:泽塔指出,有一个针对每个文件的语言选项(我真的知道,但在上面的链接中没有提到):

{-# LANGUAGE CPP #-}

对于Cabal,可以使用extensions字段。引用一下,因为它提到了这个用例:

扩展:标识符列表

每个模块使用的Haskell扩展的列表。扩展名是Extension类型的构造函数。这些决定了相应的编译器选项。特别是,CPP指定使用C预处理器对Haskell源文件进行预处理。

可以通过在受影响的源文件中放置LANGUAGE杂注来指定仅由一个模块使用的扩展名,例如:{-#LANGUAGE CPP,MultiParamTypeClasses#-}

最新更新