数据族实例非法绑定到内置语法:()
Data family instance binding illegally to built in syntax: ()
我正在尝试定义一个 data type family,其中一个参数导致空元组 ()
的类型,但它无法编译。这是一个最小的工作示例:
{-# LANGUAGE TypeFamilies #-}
data family F a
data instance F Int = ()
抛出的编译器错误显示 "Illegal binding of built-in syntax: ()
"。为什么我会收到此错误,即使我没有尝试更改 ()
的定义,而是将其设置为某些计算的输出(类型族的评估)?
为了它的价值,()
时编译的程序改为Bool
。
对于数据系列,您应该在等式右侧提供 ADT 或 GADT 定义。 ()
不是构造函数的有效定义。 data instance F Int = Bool
声明了一个名为 Bool
的构造函数,它有效,但与类型 Bool
没有任何关系。只是 Bool
可用作构造函数名称。
您尝试做的事情可以通过类型族来实现:
type family F a
type instance F Int = ()
-- or in closed form
type family F a where
F Int = ()
或者您可以为数据实例提供右侧,这相当于 ()
:
data instance F Int = FUnit
我正在尝试定义一个 data type family,其中一个参数导致空元组 ()
的类型,但它无法编译。这是一个最小的工作示例:
{-# LANGUAGE TypeFamilies #-}
data family F a
data instance F Int = ()
抛出的编译器错误显示 "Illegal binding of built-in syntax: ()
"。为什么我会收到此错误,即使我没有尝试更改 ()
的定义,而是将其设置为某些计算的输出(类型族的评估)?
为了它的价值,()
时编译的程序改为Bool
。
对于数据系列,您应该在等式右侧提供 ADT 或 GADT 定义。 ()
不是构造函数的有效定义。 data instance F Int = Bool
声明了一个名为 Bool
的构造函数,它有效,但与类型 Bool
没有任何关系。只是 Bool
可用作构造函数名称。
您尝试做的事情可以通过类型族来实现:
type family F a
type instance F Int = ()
-- or in closed form
type family F a where
F Int = ()
或者您可以为数据实例提供右侧,这相当于 ()
:
data instance F Int = FUnit