如何解决在模块之间传播 Haskell Singleton 定义
我正在使用 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 的类型理论无法胜任数据族的提升任务,需要完全依赖类型。” says the User Guide 我认为这解释了
cannot be promoted
错误。所以你不能这样定义SField
。 -
data family
应该有一个类型参数(与类相同)。类似data family Field a; ... data instance Field Int = ...; data instance Field Char = ...;
的东西。如果没有参数,您只能定义一个实例,并且它的所有构造函数都必须在该实例中。
为什么要尝试定义 data family
,为什么要通过 TH/这里的用例是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。