Haskell: определить список по нескольким строкам

Я определяю TestList (HUnit) и хочу распространять определение по нескольким строкам. Я пришел к следующему решению:

tests = TestList ([TestLabel "test1" test1] ++
                  [TestLabel "test2" test2] ++
                  [TestLabel "test3" test3] ++
                  [TestLabel "test4" test4] ++
                  [TestLabel "test5" test5])
  • Является ли использование оператора ++ правильным способом выполнения таких действий?
  • Есть ли лучшие или более элегантные способы сделать это?

Ответы

Ответ 1

Я бы написал

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

Ответ 2

Там по-прежнему есть улучшения для варианта @ephemient: вообще не используйте TestLabel, используйте ~: ярлык:

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

Обратите внимание, что для построения утверждений существует больше операторов: @?, @=?, @?=. Подробнее см. http://hunit.sourceforge.net/HUnit-1.0/Guide.html или http://hackage.haskell.org/package/HUnit. Ярлыки используют умения умножения приоритетов и типов, так что вы получите гораздо меньше скобок в виде скобок за счет немного худших сообщений об ошибках.

Ответ 3

Может, мне что-то не хватает, но почему бы не просто запятые? Это не похоже на обычный список.

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