(unwords。words)的意外结果

时间:2017-12-27 00:58:29

标签: haskell

任何人都可以在下面的示例中解释unwords . words的行为。我希望它能删除字符串s中的所有双重空格,但显然它没有。另一方面,unwords (words s)的行为与预期一致。

Prelude> s
"this     is   a  test    "
Prelude> unwords (words s) 
"this is a test"
Prelude> (unwords . words) s 
"this     is   a  test    "
Prelude> (unwords . words) s == unwords (words s)
False
Prelude> (unwords . words) s == s 
True

我在OS X 10.11.6上使用GHCi 8.2.2。

1 个答案:

答案 0 :(得分:15)

我怀疑你可能写过类似的东西:

Prelude> (unwords . words) s = s   -- oops: used "=" instead of "=="

早些时候你的GHCi会议。这样可以重新定义(.)运算符,以便f . g是任何fg的标识函数,之后您将获得观察到的行为:< / p>

Prelude> unwords (words "a  b  c  ")
"a b c"
Prelude> (unwords . words) "a  b  c  "
"a  b  c  "

甚至:

Prelude> (16 . map) "hello, world!"
"hello, world!"