eitherFuns :: TestTree
eitherFuns = testGroup "Either utilities"
  [ SC.testProperty "lefts" $
      V.lefts `analogousTo` (lefts :: [Either String Int] -> [String])
  , SC.testProperty "rights" $
      V.rights `analogousTo` (rights :: [Either String Int] -> [Int])
  , SC.testProperty "partitionEithers" $
      V.partitionEithers `analogousTo'`
        (partitionEithers :: [Either Int Int] -> ([Int], [Int])) `via`
        (fromList, \(va, vb) -> (toList va, toList vb))
  ]
eitherFuns :: TestTree
eitherFuns = testGroup "Either utilities"
  [ SC.testProperty "lefts" $
      V.lefts `analogousTo` (lefts :: [Either String Int] -> [String])
  , SC.testProperty "rights" $
      V.rights `analogousTo` (rights :: [Either String Int] -> [Int])
  , SC.testProperty "partitionEithers" $
      V.partitionEithers `analogousTo'`
        (partitionEithers :: [Either Int Int] -> ([Int], [Int])) `via`
        (fromList, \(va, vb) -> (toList va, toList vb))
  ]
eitherFuns = testGroup "Either utilities"
  [ SC.testProperty "lefts" $
      V.lefts `analogousTo` (lefts :: [Either String Int] -> [String])
  , SC.testProperty "rights" $
      V.rights `analogousTo` (rights :: [Either String Int] -> [Int])
  , SC.testProperty "partitionEithers" $
      V.partitionEithers `analogousTo'`
        (partitionEithers :: [Either Int Int] -> ([Int], [Int])) `via`
        (fromList, \(va, vb) -> (toList va, toList vb))
  ]