Haskell中[[Char]]和[Char]之间有什么区别?

时间:2019-03-12 14:41:12

标签: haskell

为什么需要在此功能中使用[[]]?

描述:该函数反转字符串上的所有元素。

revStr :: [[Char]] -> [[Char]]
revStr ls = [reverse s | s <- ls]

2 个答案:

答案 0 :(得分:6)

'a'Char,一个字符。

['a','b','c']是一个字符串,是Char的列表。该列表也可以用双引号写成"abc"。其类型可以写为String[Char]

["abc", "de"]是一个字符串列表。可以将其类型写为[String][[Char]]Char的列表列表)。

我们可以继续说[["abc","de"], ["ef", "abc"]][[String]](字符串列表)还是[[[Char]]]

您的revStr的输入不是单个字符串,而是字符串列表,因此是[[Char]]类型。它的输出还是一个字符串列表。

答案 1 :(得分:3)

  • Char是一个字符,表示一个符号,例如'A''$''3'
  • [Char]是一个字符列表,也称为[Char] = String
  • 之类的字符串(注释['A','$','3'] = "A$3")。
  • [[Char]]是一个字符列表的列表(也[[Char]] = [String])。这实际上是["Hello", "World"]
  • 之类的字符串列表

revStr反转提供的列表中的所有字符串(或[Char]),因此其类型为字符串列表