在模块间扩展Haskell Singleton定义



我正在使用singletonssingletons-th库,并且我希望(如果可能的话)在文件之间分割一个单例定义。我尝试创建一个数据族,但我得到一个Declaration cannot be promoted错误。

data family Field
data family SField :: Field -> Type
singletons
[d|
data instance Field = Field1 | Field2
|]
>>> Other file:
singletons
[d|
data instance Field = Field3
|]

如何将单例定义拆分为两个或多个文件?

您有两个问题,其中一个与文件之间的分割或TH无关。

  • "数据族实例构造函数目前无法提升。GHC的类型理论无法胜任促进数据族的任务,因为这需要完全依赖类型。用户指南说,我认为这解释了cannot be promoted错误。所以你不能这样定义SField

  • data family应该有一个类型参数(与类相同)。比如data family Field a; ... data instance Field Int = ...; data instance Field Char = ...;。如果没有形参,则只能定义一个实例,并且它的所有构造函数都必须在该实例中。

为什么你要定义一个data family,为什么通过TH/这里的用例是什么?

最新更新