2015-07-07 4 views
2

Для заявлений типа как here, String используется:string vs String in haskell?

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

И в некоторых других местах, как here, string используется:

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

Примечание разница капитализации между String и string

В чем разница между String и string в Haskell?

+1

'String' - это тип,' string' - это функция. – AJFarmar

ответ

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 - это функция.

+0

Вероятно, вы не должны использовать имя 'Void', как есть. Это общее название для канонического нежилого типа. См., Например, «Data.Void». – dfeuer

5

Похоже, что string является функцией от Text.Parsec.Char, пока String является обычным Тип.

В самом деле, в той же главе RealWorldHaskell, эта функция явно упоминается в разделе «Выборов и ошибки ;:

Это должно быть сделано аккуратно. Напомним, что наше раннее определение eol было просто char '\ n'. Существует парсер, называемый строкой, который мы можем использовать для соответствия многосимвольным шаблонам. Давайте начнем думать о том, как мы могли бы добавить поддержку \ п \ г