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

import Prelude ()

import Numeric.Natural (Natural)

import Test.QuickCheck
       (Arbitrary (..), CoArbitrary (..), arbitrarySizedNatural,
       coarbitraryIntegral, shrinkIntegral)
import Test.QuickCheck.Function (Function (..), functionIntegral)

-------------------------------------------------------------------------------
-- nats
-------------------------------------------------------------------------------

instance Arbitrary Natural where
  arbitrary :: Gen Natural
arbitrary = Gen Natural
forall a. Integral a => Gen a
arbitrarySizedNatural
  shrink :: Natural -> [Natural]
shrink    = Natural -> [Natural]
forall a. Integral a => a -> [a]
shrinkIntegral

instance CoArbitrary Natural where
  coarbitrary :: Natural -> Gen b -> Gen b
coarbitrary = Natural -> Gen b -> Gen b
forall a b. Integral a => a -> Gen b -> Gen b
coarbitraryIntegral

instance Function Natural where
  function :: (Natural -> b) -> Natural :-> b
function = (Natural -> b) -> Natural :-> b
forall a b. Integral a => (a -> b) -> a :-> b
functionIntegral