Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与签名一起使用的Haskell类型关键字_Haskell_Types_Signature_Ghci - Fatal编程技术网

与签名一起使用的Haskell类型关键字

与签名一起使用的Haskell类型关键字,haskell,types,signature,ghci,Haskell,Types,Signature,Ghci,在中,以下行是什么意思: type Move a = Zipper a -> Maybe (Zipper a) 类型是类型的同义词,并且使用相同的数据构造函数,因此这毫无意义。它在这里是如何使用的?type允许我们创建同义词,正如您所说。这意味着我们可以制作长而复杂类型的缩短版本。下面是字符串基类型的定义。是的,这就是它的定义: type String = [Char] 这允许我们在编写类型时使其更具可读性;每个人都喜欢看String而不是[Char] 您还可以在data关键字中使用类

在中,以下行是什么意思:

type Move a = Zipper a -> Maybe (Zipper a)

类型是类型的同义词,并且使用相同的数据构造函数,因此这毫无意义。它在这里是如何使用的?

type
允许我们创建同义词,正如您所说。这意味着我们可以制作长而复杂类型的缩短版本。下面是
字符串
基类型的定义。是的,这就是它的定义:

type String = [Char]
这允许我们在编写类型时使其更具可读性;每个人都喜欢看
String
而不是
[Char]

您还可以在
data
关键字中使用类型参数。以下是一些例子:

type Predicate t = t -> Bool
type Transform t = t -> t
type RightFoldSignature a b = (a -> b -> b) -> b -> [a] -> b
type TwoTuple a b = (a,b)
type ThreeTuple a b c = (a,b,c)
。。。等等因此,这里的声明没有什么特别奇怪的地方——作者正在创建一个类型同义词,以使内容更易于编写和阅读,大概是用于作者想要创建的函数类型中


向您了解Haskell所具有的功能。在这里,可以找到不同声明的列表和一篇文章。

它是一个类型同义词(或类型别名)。它只是意味着无论你在哪里看到
Move X
,你都可以用
Zipper X->Maybe(Zipper X)
替换它。我不知道它也可以用作签名的类型别名。现在一切都清楚了,谢谢@user2340939这是它唯一可以使用的功能。签名只是一种类型。还有一个问题可能会重复:函数moveQ::Move A->b->(Zipper A->b)->Zipper A->b是否会转换为moveQ::Zipper A->Maybe(Zipper A->b)->(Zipper A->b)->Zipper A->b或moveQ:(Zipper A->Maybe(Zipper A->Zipper A))->b->也就是说,对于一个函数参数?@user2340939否-它的行为方式类似于
(a->b)->c
,因为
a->b->c
等同于
a->(b->c)
。考虑将其扩展到括号中。