Haskell:在多行上定义列表

时间:2011-11-03 22:17:36

标签: haskell

我正在定义一个TestList(HUnit),并希望将定义分布在多行上。我找到了以下解决方案:

tests = TestList ([TestLabel "test1" test1] ++
                  [TestLabel "test2" test2] ++
                  [TestLabel "test3" test3] ++
                  [TestLabel "test4" test4] ++
                  [TestLabel "test5" test5])
  • 使用++运算符是否适合这样做?
  • 有更好或更优雅的方法吗?

3 个答案:

答案 0 :(得分:23)

我会写

tests = TestList
    [ TestLabel "test1" test1
    , TestLabel "test2" test2
    , TestLabel "test3" test3
    , TestLabel "test4" test4
    , TestLabel "test5" test5 ]

答案 1 :(得分:10)

@ephemient变体还有改进之处:根本不要使用TestLabel,使用~:快捷方式:

tests = TestList
    [ "test1" ~: test1
    , "test2" ~: test2
    , "test3" ~: test3
    , "test4" ~: test4
    , "test5" ~: test5 ]

请注意,构造断言的运算符更多:@?@=?@?=。有关详细信息,请参阅http://hunit.sourceforge.net/HUnit-1.0/Guide.htmlhttp://hackage.haskell.org/package/HUnit。这些快捷方式巧妙地使用优先级和类型类,因此您可以通过稍微差一些的错误消息来减少括号噪声。

答案 2 :(得分:5)

也许我错过了什么,但为什么不只是逗号?这似乎与正常列表不同。

tests = TestList ([TestLabel "test1" test1,
                   TestLabel "test2" test2,
                   TestLabel "test3" test3,
                   TestLabel "test4" test4,
                   TestLabel "test5" test5])