Haskell 创建一个类型级结构,该结构包含带有单例的TypeLight

Haskell 创建一个类型级结构,该结构包含带有单例的TypeLight,haskell,type-level-computation,singleton-type,Haskell,Type Level Computation,Singleton Type,假设我定义了一些类型级结构,如下所示: import Data.Singletons.Prelude import Data.Singletons.TH singletons [d| data Natural = Succ Natural | Zero deriving (Show, Ord, Eq) data Coord = Coord Natural Natural deriving (Show, Eq) |] 但是,

假设我定义了一些类型级结构,如下所示:

import Data.Singletons.Prelude
import Data.Singletons.TH

singletons [d|
            data Natural = Succ Natural | Zero deriving (Show, Ord, Eq)
            data Coord = Coord Natural Natural deriving (Show, Eq)
           |]
但是,我不想定义自己的
Natural
类型,而是想使用
GHC.TypeLit.Nat
(如果没有其他原因,编译器错误消息更好的话)。
singletons
包已经在
Data.singletons.TypeLits
中定义了相关类的实例,因此这应该是可能的

但是,试图用
Nat
替换
Natural
,就像这样

import Data.Singletons.Prelude
import Data.Singletons.TH
import Data.Singletons.TypeLits

singletons [d| data Coord = Coord Nat Nat deriving (Show, Eq) |]
产生以下错误

    • Couldn't match type ‘GHC.Natural.Natural’ with ‘Nat’
      Expected type: Nat
        Actual type: Demote Nat
    • In the first argument of ‘Coord’, namely ‘(fromSing b_awjJ)’
      In the expression: (Coord (fromSing b_awjJ)) (fromSing b_awjK)
      In an equation for ‘fromSing’:
          fromSing (SCoord b_awjJ b_awjK)
            = (Coord (fromSing b_awjJ)) (fromSing b_awjK)
我理解为什么会出现这个错误,但我不确定如何从这里开始。是否可以使用
singleton
模板Haskell创建包含
TypeLits
的类型级结构?如果没有,是否有办法做到这一点,而不必手动实现
Coord
所需的所有singleton机制