如何在编译时为使用堆栈的库定义用户可定义的自定义类型

时间:2018-03-11 21:48:09

标签: haskell haskell-stack

在我的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等扩展。考虑到时间限制,我不认为这是一条我想要去的路径,但是,如果您认为这是唯一/更好的选择,我想听听它。

0 个答案:

没有答案
相关问题