Haskell:显示函数行与unlines完全相反

时间:2011-11-17 07:24:04

标签: haskell

我必须找到一些例子来说明内置的Haskell函数" unlines"与"行",即

完全相反
unlines.lines x != x

其中x是包含换行符的String。我找到了一个例子:

"aa\nbb"

将成为

"aa\nbb\n"

有没有人知道其他任何不显示相同缺陷的示例(即,unlines总是会在最后一行之后添加换行符)?

要澄清:根据自动化测试,我已经解决了这项任务 - 我只是使用了以上三次。如果还有其他根本不同的解决方案,我感兴趣。

1 个答案:

答案 0 :(得分:9)

如果使用快速检查,您可以找到较小的一个:

import Test.QuickCheck
main = quickCheck $ \x -> (unlines . lines) x == x

它会自动缩小反例,因此它通常只会报告找到的"a"最小的一个。

我们可以更改属性以仅测试以\n结尾的字符串:

import Test.QuickCheck
main = quickCheck $ \x0 -> let x = x0 ++ "\n" in (unlines . lines) x == x

我没有找到任何反例。

您可能也有兴趣测试另一个方向(lines . unlines)。排除其中一个字符串包含换行符的情况,此属性成立。