haskell中的字符串vs字符串?

时间:2015-07-07 08:21:15

标签: haskell types naming-conventions

对于here类型声明,使用String

p_pair :: CharParser () (String, Maybe String)

here等其他地方,使用了string

req = ctor <$ string name <* char ' '

请注意Stringstring

之间的大写差异

Haskell中Stringstring之间有什么区别?

3 个答案:

答案 0 :(得分:9)

在Haskell中,值和类型变量名称以小写字母开头,而值和类型构造函数名称,类型同义词和类以大写字母开头。例如:

data Tree a = Empty
            | Node a (Tree a) (Tree a)

height Empty = 0
height (Node _ l r) = max (height l) (height r) + 1

请注意,Tree是类型构造函数名称,EmptyNode是值构造函数名称,height是函数名称。在您的情况下,String是“字符串”类型的名称,它只是[Char]的同义词,而string是一个函数。

答案 1 :(得分:5)

看起来string是来自Text.Parsec.Char的功能,而String是通常的类型。

事实上,在RealWorldHaskell的同一章中,在“选择和错误”中明确提到了这个功能;

  

必须小心这样做。回想一下,我们之前对eol的定义只是char'\ n'。我们可以使用一个名为string的解析器来匹配多字符模式。让我们首先考虑如何添加对\ n \ r

的支持

答案 2 :(得分:3)

一个是a type,另一个是a function