Haskell:在多行上定义列表

Sco*_*tus 17 haskell

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

tests = TestList ([TestLabel "test1" test1] ++
                  [TestLabel "test2" test2] ++
                  [TestLabel "test3" test3] ++
                  [TestLabel "test4" test4] ++
                  [TestLabel "test5" test5])
Run Code Online (Sandbox Code Playgroud)
  • 使用++操作员是否正确地做这些事情?
  • 是否有更好或更优雅的方法来做到这一点?

eph*_*ent 23

我会写的

tests = TestList
    [ TestLabel "test1" test1
    , TestLabel "test2" test2
    , TestLabel "test3" test3
    , TestLabel "test4" test4
    , TestLabel "test5" test5 ]
Run Code Online (Sandbox Code Playgroud)

  • 迷人!哈斯勒在他的自然栖息地!注意他的Haskellisms:狂野的Haskellers通常用逗号括起来逗号.由于Haskell的空白是重要的,因此在开始列表定义或类似时,野生Haskellers通常会转到下一行.Crikey! (26认同)

npo*_*cop 10

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

tests = TestList
    [ "test1" ~: test1
    , "test2" ~: test2
    , "test3" ~: test3
    , "test4" ~: test4
    , "test5" ~: test5 ]
Run Code Online (Sandbox Code Playgroud)

请注意,有更多的运营商构建断言:@?,@=?,@?=.有关详细信息,请参阅http://hunit.sourceforge.net/HUnit-1.0/Guide.htmlhttp://hackage.haskell.org/package/HUnit.快捷方式巧妙地使用优先级和类型类,因此您将以更差的错误消息为代价获得更少的括号噪声.


Chu*_*uck 5

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

tests = TestList ([TestLabel "test1" test1,
                   TestLabel "test2" test2,
                   TestLabel "test3" test3,
                   TestLabel "test4" test4,
                   TestLabel "test5" test5])
Run Code Online (Sandbox Code Playgroud)