Nat*_*ell 5 haskell singleton-type
我正在使用单例库在 Haskell 中编写具有多态变体的原型编程语言。我有一个基本类型的类型,如下所示:
import Data.Singletons.TH
import Data.Singletons
import GHC.Natural
import Data.Singletons.TypeLits
$(singletons [d|
data MyType =
PredT
| ProcT [MyType]
| IntT
| FloatT
| StringT
| FuncT MyType MyType
| VariantT Natural [MyType]
| UnionT [MyType]
|])
Run Code Online (Sandbox Code Playgroud)
的Natural在参数VariantT被用来标识特定的变体,而对于这实际上是很重要的Natural(而不是像在NAT定义为代数数据类型)efficency原因。
问题是,有了这个定义,我得到:
Couldn't match expected type ‘Natural’
with actual type ‘Demote Natural’
Run Code Online (Sandbox Code Playgroud)
通常,根据我对单例库的经验,当我尝试将类型用作单例SingKind而不支持该类型时,我会遇到这样的错误(无论如何我的理解)e.x. for Char,所以我不知道为什么会这样不工作。
我已经尝试过Demote Natural, Nat, 以及不同的导入(我想也许我没有使用正确的“Nat”或“Natural”,单身人士可以使用),所有这些都给了我类似的错误。这里有什么问题?我是否必须编写单例为 which 类型手动生成的定义Demote a != a,或者我在这里遗漏了什么?