数据族实例非法绑定到内置语法:()

Her*_* Yi 3 haskell compiler-errors type-families

我正在尝试定义一个数据类型系列,其中一个参数导致空元组的类型(),但它不编译.这是一个最小的工作示例:

{-# LANGUAGE TypeFamilies #-}

data family F a
data instance F Int = ()
Run Code Online (Sandbox Code Playgroud)

抛出的编译器错误说"内置语法的非法绑定:()".为什么我得到这个错误,即使我不是要改变定义(),而是将其设置为某些计算的输出(类型族的评估)?

对于它的价值,当程序编译()改为Bool代替.

And*_*ács 7

对于数据族,您应该在等式的右侧提供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 = ()
Run Code Online (Sandbox Code Playgroud)

或者你可以为数据实例提供一个右侧,它相当于():

data instance F Int = FUnit
Run Code Online (Sandbox Code Playgroud)