maybeFuns :: TestTree
maybeFuns = testGroup "Maybe utilities"
  [ SC.testProperty "mapMaybe" $ SC.changeDepth (min 2) $
      \f -> V.mapMaybe f `analogousTo` mapMaybe (f :: Int -> Maybe Char)
  , SC.testProperty "catMaybes" $
      V.catMaybes `analogousTo` (catMaybes :: [Maybe Bool] -> [Bool])
  , SC.testProperty "vectorToMaybe" $
      V.vectorToMaybe `analogousTo'` (listToMaybe :: [Int] -> Maybe Int) `via`
        (fromList, id)
  , SC.testProperty "maybeToVector" $
      V.maybeToVector `analogousTo'` (maybeToList :: Maybe () -> [()]) `via`
        (id, toList)
  ]
maybeFuns :: TestTree
maybeFuns = testGroup "Maybe utilities"
  [ SC.testProperty "mapMaybe" $ SC.changeDepth (min 2) $
      \f -> V.mapMaybe f `analogousTo` mapMaybe (f :: Int -> Maybe Char)
  , SC.testProperty "catMaybes" $
      V.catMaybes `analogousTo` (catMaybes :: [Maybe Bool] -> [Bool])
  , SC.testProperty "vectorToMaybe" $
      V.vectorToMaybe `analogousTo'` (listToMaybe :: [Int] -> Maybe Int) `via`
        (fromList, id)
  , SC.testProperty "maybeToVector" $
      V.maybeToVector `analogousTo'` (maybeToList :: Maybe () -> [()]) `via`
        (id, toList)
  ]
maybeFuns = testGroup "Maybe utilities"
  [ SC.testProperty "mapMaybe" $ SC.changeDepth (min 2) $
      \f -> V.mapMaybe f `analogousTo` mapMaybe (f :: Int -> Maybe Char)
  , SC.testProperty "catMaybes" $
      V.catMaybes `analogousTo` (catMaybes :: [Maybe Bool] -> [Bool])
  , SC.testProperty "vectorToMaybe" $
      V.vectorToMaybe `analogousTo'` (listToMaybe :: [Int] -> Maybe Int) `via`
        (fromList, id)
  , SC.testProperty "maybeToVector" $
      V.maybeToVector `analogousTo'` (maybeToList :: Maybe () -> [()]) `via`
        (id, toList)
  ]