我正在浏览some Haskell documentation,并找到了声明
您可以将构造函数(用于类型和数据)声明为中缀运算符,这可以使您的代码更具可读性。
我可以使用中缀形式的数据构造函数,如下所示:
Prelude> data List a = Empty | a :-> (List a) deriving Show
Prelude>
Prelude> let var1 = 10 :-> Empty
Prelude> let var2 = 20 :-> var1
Prelude> let var3 = 30 :-> var2
Prelude>
Prelude> var1
10 :-> Empty
Prelude>
Prelude> var2
20 :-> (10 :-> Empty)
Prelude>
Prelude> var3
30 :-> (20 :-> (10 :-> Empty))
我的问题是如何在中缀形式中使用类型构造函数,有人能给我一个例子来理解这个吗?
答案 0 :(得分:7)
> :set -XTypeOperators
> data a :-> b = C (a -> b)
> :t C id
C id :: b :-> b
请记住,其名称必须以 :
开头(粗略地说,:
被视为“大写”)。
否则,请使用反引号,如a `T` b
。
答案 1 :(得分:4)
为了扩展@ chi的答案,使用最近的GHC版本,TypeOperators
的语法有所改变:输入构造函数名称,否则将是中缀类型变量名称(即没有前导:
的符号仍然被归类为类型构造函数名称,这意味着以下代码可以工作并定义中缀类型构造函数+
:
{-# language TypeOperators #-}
data a + b = L a | R b