-- | Utility functions for defining @QuickCheck@'s 'Test.QuickCheck.shrink'
--
module Test.Util.Shrink (
    andId
  , dropId
  ) where

{-------------------------------------------------------------------------------
  Shrinking Helpers
-------------------------------------------------------------------------------}

-- | Drop the last element
--
-- If every source list in a comprehension uses 'andId', then the last element
-- will be a copy of the initial input.
--
dropId :: [a] -> [a]
dropId :: forall a. [a] -> [a]
dropId = [a] -> [a]
forall a. HasCallStack => [a] -> [a]
init

-- | Add the argument as the last element of the output
--
andId :: (a -> [a]) -> a -> [a]
andId :: forall a. (a -> [a]) -> a -> [a]
andId a -> [a]
f a
x = a -> [a]
f a
x [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
x]