2012-01-13 79 views
3

这个表达式:新手上sort.words

sort words "fire water earth fire" 

---给出了这样的错误---

Couldn't match expected type `[a]' 
against inferred type `GHC.Base.String -> [GHC.Base.String]' 

有人能向我解释,这到底是怎么回事,如何优雅地表达排序。话?

回答

8

你想这样的:

sort (words "fire water earth fire") 

当你做

sort words "fire water earth fire" 

它实际上做

(sort words) "fire water earth fire" 

sort预计列表([a]),但你不是给它words,这是一个函数接受一个字符串并返回s的列表(String -> [String]),因此错误信息(它不能把String -> [String]作为任何东西的列表)。

你也可以这样做:

sort $ words "fire water earth fire" 

这相当于第一版本,看起来更整洁。

+0

哇,答案就在我眼前!感谢:D – 2012-01-13 22:30:22

3

函数应用程序是从左边关联的,因此解析为(sort words) "fire water earth fire"。不用说,排序功能words不会工作得很好!因此,错误消息告诉您,sort需要[a](即列表)类型的参数,但您已将其应用于某种类型的String -> [String],即words

你想要么sort (words "fire water earth fire"),要么使用更常见的成语sort $ words "fire water earth fire"($)运算符只是函数应用程序,但它具有非常低的右关联优先级,所以它经常用于像这样的表达式中以避免写出括号。