我在几个地方见过这个:
data T = T a :-> b
值得注意的是,我们有快速检查
data Fun a b = Fun (a :-> b, b) (a -> b)
:->
是什么?与->
有什么不同?
答案 0 :(得分:12)
以冒号开头的运算符是构造函数或类型名称。在这种情况下,它是特定于quickcheck的数据类型的类型名称,但通常是符号: - >可以用于任何构造函数或类型名称(它不是正确语言的一部分)。
The definition of :-> in quickcheck:
-- the type of possibly partial concrete functions
data a :-> c where
Pair :: (a :-> (b :-> c)) -> ((a,b) :-> c)
(:+:) :: (a :-> c) -> (b :-> c) -> (Either a b :-> c)
Unit :: c -> (() :-> c)
Nil :: a :-> c
Table :: Eq a => [(a,c)] -> (a :-> c)
Map :: (a -> b) -> (b -> a) -> (b :-> c) -> (a :-> c)
答案 1 :(得分:5)
回答了我自己的问题:首先将其视为
data Edge = i :-> i
:->
当然是构造函数。