在Haskell函数类型声明中使用[Char]而不是String是一个坏主意

Iva*_*dov 4 haskell hlint sublimetext2

我刚刚开始学习Haskell,"学习Haskell for Great Good".我目前正在阅读"类型和类型类"一章,所以我的知识非常......不存在.我使用Sublime Text 2和SublimeHaskell包,它在每次保存时构建/检查文件.

问题:我正在尝试像这样进行函数类型声明:

funcName :: [Char] -> [Char]
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

警告:使用找到的字符串:[Char] - > [Char]为什么不:String - > String

建立失败

你能解释一下为什么使用Char数组而不是字符串是一个坏主意,或者给我一个链接来解释可能的反响等等.我用Google搜索,什么也没发现.

PS我是一名C#开发人员,我理解char数组和c语言中的字符串之间的区别.

ert*_*tes 13

在基础库的某个地方你会发现这个定义:

type String = [Char]
Run Code Online (Sandbox Code Playgroud)

它说,String并且[Char]是完全一样的东西.您选择哪两个是文档选择.我经常定义类型别名,如下所示:

type Domain = ByteString
type UserName = Text
Run Code Online (Sandbox Code Playgroud)

使用文档类型是个好主意.

另外,作为一个重要的附注,[Char]不是字符数组的类型,而是字符列表.由于还有实际的数组类型,区别很重要!


sep*_*p2k 7

String它只不过是一个类型别名[Char],所以两者之间没有实际意义 - 这只是一个可读性问题.