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

标签 haskell compiler-errors type-families

我正在尝试定义一个 data type family ,其参数之一导致空元组 () 的类型,但它无法编译。这是一个最小的工作示例:

{-# LANGUAGE TypeFamilies #-}

data family F a
data instance F Int = ()

抛出的编译器错误显示“内置语法的非法绑定(bind):()”。为什么我会收到此错误,即使我没有尝试更改 () 的定义,而是将其设置为某些计算(类型系列的评估)的输出?

无论如何,当 () 改为 Bool 时编译的程序。

最佳答案

对于数据族,您应该在等式右侧提供 ADT 或 GADT 定义。 () 不是构造函数的有效定义。 数据实例 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

关于haskell - 数据族实例非法绑定(bind)到内置语法: (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407256/

相关文章:

haskell - 如果类型构造函数具有多个类型参数,如何使类型构造函数成为 Functor 类型类的一部分?

python - 如何使用 Prelude.functions 创建字符串列表?

vba - 如何从getClipboardData返回数据?

haskell - 如何在不使用-XUndecidableInstances的情况下解决功能依赖项的覆盖条件

haskell - Haskell 中数据族的模式匹配

haskell - 是否可以实现一个在 lambda 演算上返回 n 元组的函数?

haskell : GLUt32 error message when running my program

c++ - Linux : error: new_allocator.h:93:7: error: multiple overloads of 'address' instantiate to the same signature上的跨平台编译问题

matlab - 在Matlab中加载文件.dat时出错

haskell - 类型族、GADT 和命名记录的编译错误