我正在使用singletons
和singletons-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/这里的用例是什么?