在Haskell中学习“:?:”运算符的含义

时间:2019-09-27 17:29:06

标签: haskell parametric-polymorphism type-constructor

我正在学习Haskell,我刚在书中看到了这个奇怪的数据结构,看起来像这样:data ListaOrd a = a :?: (ListaOrd a) | Nulo deriving Show。据说这应该代表一个有序列表,但是我认为我并不真正理解它。我的问题是,该代码中“:?:”符号的含义是什么?

1 个答案:

答案 0 :(得分:7)

  

我的问题是:?:

是什么意思

您在这里定义:?:运算符的数据构造函数。实际上,在GHCi中,您可以查询(:?:)函数的类型:

:t (:?:)
(:?:) :: a -> ListaOrd a -> ListaOrd 

因此,它与使用其他名称完全相同,例如:

data ListaOrd a = Conso a (ListaOrd a) | Nulo deriving Show

但是在这里,我们定义了一个名称为(:?:)的数据构造函数,该构造函数也可以与运算符语法一起使用。实际上,您可能已经使用过此类数据构造函数。例如(:)是列表的数据构造函数。