{-# LANGUAGE CPP              #-}
{-# LANGUAGE FlexibleContexts #-}
#if __GLASGOW_HASKELL__ >= 706
{-# LANGUAGE PolyKinds        #-}
#endif
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.Tagged () where

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

import Data.Proxy (Proxy (Proxy))

import Test.QuickCheck

import qualified Data.Tagged as Tagged (Tagged (..))

-------------------------------------------------------------------------------
-- tagged
-------------------------------------------------------------------------------

instance Arbitrary2 Tagged.Tagged where
    liftArbitrary2 :: forall a b. Gen a -> Gen b -> Gen (Tagged a b)
liftArbitrary2 Gen a
_ Gen b
arb = forall {k} (s :: k) b. b -> Tagged s b
Tagged.Tagged forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen b
arb
    liftShrink2 :: forall a b. (a -> [a]) -> (b -> [b]) -> Tagged a b -> [Tagged a b]
liftShrink2 a -> [a]
_ b -> [b]
shr = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall {k} (s :: k) b. b -> Tagged s b
Tagged.Tagged forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> [b]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (s :: k) b. Tagged s b -> b
Tagged.unTagged

instance Arbitrary1 (Tagged.Tagged a) where
    liftArbitrary :: forall a. Gen a -> Gen (Tagged a a)
liftArbitrary Gen a
arb = forall {k} (s :: k) b. b -> Tagged s b
Tagged.Tagged forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
    liftShrink :: forall a. (a -> [a]) -> Tagged a a -> [Tagged a a]
liftShrink a -> [a]
shr = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall {k} (s :: k) b. b -> Tagged s b
Tagged.Tagged forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (s :: k) b. Tagged s b -> b
Tagged.unTagged

instance Arbitrary b => Arbitrary (Tagged.Tagged a b) where
    arbitrary :: Gen (Tagged a b)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
    shrink :: Tagged a b -> [Tagged a b]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1

instance CoArbitrary b => CoArbitrary (Tagged.Tagged a b) where
    coarbitrary :: forall b. Tagged a b -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {k} (s :: k) b. Tagged s b -> b
Tagged.unTagged

instance Function b => Function (Tagged.Tagged a b) where
    function :: forall b. (Tagged a b -> b) -> Tagged a b :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall {k} (s :: k) b. Tagged s b -> b
Tagged.unTagged forall {k} (s :: k) b. b -> Tagged s b
Tagged.Tagged


instance Arbitrary1 Proxy where
  liftArbitrary :: forall a. Gen a -> Gen (Proxy a)
liftArbitrary Gen a
_ = forall (f :: * -> *) a. Applicative f => a -> f a
pure forall {k} (t :: k). Proxy t
Proxy
  liftShrink :: forall a. (a -> [a]) -> Proxy a -> [Proxy a]
liftShrink a -> [a]
_ Proxy a
_ = []

instance Arbitrary (Proxy a) where
  arbitrary :: Gen (Proxy a)
arbitrary = forall (f :: * -> *) a. Applicative f => a -> f a
pure forall {k} (t :: k). Proxy t
Proxy
  shrink :: Proxy a -> [Proxy a]
shrink Proxy a
_  = []

instance CoArbitrary (Proxy a) where
  coarbitrary :: forall b. Proxy a -> Gen b -> Gen b
coarbitrary Proxy a
_ = forall a. a -> a
id

instance Function (Proxy a) where
  function :: forall b. (Proxy a -> b) -> Proxy a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap (forall a b. a -> b -> a
const ()) (forall a b. a -> b -> a
const forall {k} (t :: k). Proxy t
Proxy)