packages feed

prolude-0.0.0.14: Prolude/Test.hs

{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE UndecidableInstances #-}

module Prolude.Test 
  ( -- * QuickCheck re-exports
    module Test.QuickCheck
    -- * Type
  , ArbitraryUniform(..)
    -- * Function
  , arbitraryIO
  )
where

import Test.QuickCheck (Arbitrary(arbitrary), generate, resize, sublistOf)
import Test.QuickCheck.Instances ()
import qualified Control.Monad.IO.Class as Monad
import qualified Generic.Random as Random
import qualified GHC.Generics as Generic

newtype ArbitraryUniform a = ArbitraryUniform  { unArbitraryUniform :: a }
  deriving Generic.Generic via a

instance (Random.GArbitrary Random.UnsizedOpts a, Random.GUniformWeight a) =>  Arbitrary (ArbitraryUniform a) where
  arbitrary = Random.genericArbitraryU

arbitraryIO :: (Arbitrary a, Monad.MonadIO m) => m a
arbitraryIO = Monad.liftIO (generate arbitrary)