对于here类型声明,使用String
:
p_pair :: CharParser () (String, Maybe String)
在here等其他地方,使用了string
:
req = ctor <$ string name <* char ' '
请注意String
和string
Haskell中String
和string
之间有什么区别?
答案 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
是类型构造函数名称,Empty
和Node
是值构造函数名称,height
是函数名称。在您的情况下,String
是“字符串”类型的名称,它只是[Char]
的同义词,而string
是一个函数。
答案 1 :(得分:5)
看起来string
是来自Text.Parsec.Char
的功能,而String
是通常的类型。
事实上,在RealWorldHaskell的同一章中,在“选择和错误”中明确提到了这个功能;
必须小心这样做。回想一下,我们之前对eol的定义只是char'\ n'。我们可以使用一个名为string的解析器来匹配多字符模式。让我们首先考虑如何添加对\ n \ r
的支持
答案 2 :(得分:3)
一个是a type,另一个是a function。