这个表达式:
sort words "fire water earth fire"
---给出了这个错误---
Couldn't match expected type `[a]'
against inferred type `GHC.Base.String -> [GHC.Base.String]'
有人可以向我解释这里发生了什么,以及如何优雅地表达sort.words?
答案 0 :(得分:8)
你想要这个:
sort (words "fire water earth fire")
当你做
时sort words "fire water earth fire"
它实际上在做
(sort words) "fire water earth fire"
sort
需要一个列表([a]
),但你要给它words
,这是一个函数接受一个字符串并返回一个字符串列表({{1} }),因此错误消息(它不能将String -> [String]
视为任何事物的列表)。
你也可以这样做:
String -> [String]
相当于第一个版本,可能看起来更整洁。
答案 1 :(得分:3)
函数应用程序从左侧开始关联,因此解析为(sort words) "fire water earth fire"
。不用说,对函数words
进行排序不会很好!因此,错误消息告诉您sort
期望类型[a]
的参数(即列表),但您已将其应用于String -> [String]
类型的某些内容,即{ {1}}。
您想要words
或使用更常见的习语sort (words "fire water earth fire")
。 sort $ words "fire water earth fire"
运算符只是函数应用程序,但它具有非常低的右关联优先级,所以它经常在这样的表达式中使用,以避免写出括号。