【问题标题】:Data family instance binding illegally to built in syntax: ()数据族实例非法绑定到内置语法:()
【发布时间】:2015-07-14 12:56:27
【问题描述】:

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

{-# LANGUAGE TypeFamilies #-}

data family F a
data instance F Int = ()

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

不管怎样,() 时编译的程序改为Bool

【问题讨论】:

    标签: haskell compiler-errors type-families


    【解决方案1】:

    对于数据系列,您应该在等式的右侧提供 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
    

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2018-02-22
      相关资源
      最近更新 更多