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机制