   $  label "Value"     testsValue
    ++ label "Expr"      testsExpr
    ++ label "Statement" testsStatement
  where
    label :: String -> [Test] -> [Test]
    label l = map (\(i,t) -> TestLabel (l ++ " [" ++ show i ++ "]") t) . zip [1..]

main = fmap (const ()) $ runTestTT $ test
    $  label "Value"     testsValue
    ++ label "Expr"      testsExpr
    ++ label "Statement" testsStatement
  where
    label :: String -> [Test] -> [Test]
    label l = map (\(i,t) -> TestLabel (l ++ " [" ++ show i ++ "]") t) . zip [1..]
main = fmap (const ()) $ runTestTT $ test
    $  label "Value"     testsValue
    ++ label "Expr"      testsExpr
    ++ label "Statement" testsStatement
  where
    label :: String -> [Test] -> [Test]
    label l = map (\(i,t) -> TestLabel (l ++ " [" ++ show i ++ "]") t) . zip [1..]