在我的Haskell项目工作了一段时间之后,我决定使用带有堆栈的单个库的多个可执行文件。背后的原因是,我希望有多个测试可执行文件,以便每个可以展示我正在编写的单个库的一些用途。当我尝试为每个可执行文件定义可能不同的类型时,会出现问题。
让您了解我想要完成的任务:
我目前在我的库中定义了一个类型的synonim:
type GameState = Int
类型Int
为可执行文件1编写,但是,为了编译可执行文件2,我希望MyOtherDataType
取代Int
:
type GameState = AnotherDataType
我尝试在CPP Language extension的帮助下使用#define
设置状态类型变量。这个变量可以在编译时作为参数传递给库,但是我无法将堆栈路由作为库的可执行定义中的已定义类型变量(例如:-DGAME_STATE_TYPE=Int
)。这是我对干净解决方案最接近的想法,不需要重写我的很多代码。
我也尝试将类型定义更改为:
data GameStateType a = GameStateType a
但我很快就知道这需要我重写很多类型类,类型定义,monad堆栈,并启用MultiParamTypeClasses等扩展。考虑到时间限制,我不认为这是一条我想要去的路径,但是,如果您认为这是唯一/更好的选择,我想听听它。