这个表达式:新手上sort.words
sort words "fire water earth fire"
---给出了这样的错误---
Couldn't match expected type `[a]'
against inferred type `GHC.Base.String -> [GHC.Base.String]'
有人能向我解释,这到底是怎么回事,如何优雅地表达排序。话?
这个表达式:新手上sort.words
sort words "fire water earth fire"
---给出了这样的错误---
Couldn't match expected type `[a]'
against inferred type `GHC.Base.String -> [GHC.Base.String]'
有人能向我解释,这到底是怎么回事,如何优雅地表达排序。话?
你想这样的:
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"
这相当于第一版本,看起来更整洁。
函数应用程序是从左边关联的,因此解析为(sort words) "fire water earth fire"
。不用说,排序功能words
不会工作得很好!因此,错误消息告诉您,sort
需要[a]
(即列表)类型的参数,但您已将其应用于某种类型的String -> [String]
,即words
。
你想要么sort (words "fire water earth fire")
,要么使用更常见的成语sort $ words "fire water earth fire"
。 ($)
运算符只是函数应用程序,但它具有非常低的右关联优先级,所以它经常用于像这样的表达式中以避免写出括号。
哇,答案就在我眼前!感谢:D – 2012-01-13 22:30:22