Haskell 与签名一起使用的类型关键字
Haskell type keyword used with signature
在the code from Scrap Your Zippers中,下面这行是什么意思:
type Move a = Zipper a -> Maybe (Zipper a)
Type 是类型的同义词并使用相同的数据构造函数,因此这没有意义。这里是怎么用的?
正如您所说,type
允许我们创建同义词。这意味着我们可以制作长而复杂类型的缩短版本。这是 String
基本类型的定义。是的,它是这样定义的:
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有它是own little section on this, a list of the different declarations can be found here, and an article here。
在the code from Scrap Your Zippers中,下面这行是什么意思:
type Move a = Zipper a -> Maybe (Zipper a)
Type 是类型的同义词并使用相同的数据构造函数,因此这没有意义。这里是怎么用的?
type
允许我们创建同义词。这意味着我们可以制作长而复杂类型的缩短版本。这是 String
基本类型的定义。是的,它是这样定义的:
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有它是own little section on this, a list of the different declarations can be found here, and an article here。