packages feed

quickcheck-instances-0.3.26: src/Test/QuickCheck/Instances/Solo.hs

{-# LANGUAGE CPP              #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.Solo () where

import Prelude ()
import Test.QuickCheck.Instances.CustomPrelude

import Data.Tuple.Solo (Solo (Solo), getSolo)

import Test.QuickCheck

instance Arbitrary1 Solo where
  liftArbitrary = fmap Solo
  liftShrink shr = map Solo . shr . getSolo

instance Arbitrary a => Arbitrary (Solo a) where
  arbitrary = arbitrary1
  shrink = shrink1

instance CoArbitrary a => CoArbitrary (Solo a) where
  coarbitrary = coarbitrary . getSolo

instance Function a => Function (Solo a) where
  function = functionMap getSolo Solo