module Generics.SOP.Arbitrary (
garbitrary
, Arbitrary(..)
) where
import Control.Monad
import Test.QuickCheck
import Generics.SOP
garbitrary :: forall a. (Generic a, All2 Arbitrary (Code a)) => Gen a
garbitrary :: forall a. (Generic a, All2 Arbitrary (Code a)) => Gen a
garbitrary = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a. Generic a => Rep a -> a
to forall a b. (a -> b) -> a -> b
$ forall {l} (h :: (* -> *) -> l -> *) (xs :: l) (f :: * -> *).
(SListIN h xs, SListIN (Prod h) xs, HSequence h, Applicative f) =>
h f xs -> f (h I xs)
hsequence forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall a. [a] -> Gen a
elements (forall {k} (xss :: [[k]]) (f :: k -> *).
SListI xss =>
POP f xss -> [SOP f xss]
apInjs_POP forall a b. (a -> b) -> a -> b
$ forall k l (h :: (k -> *) -> l -> *) (c :: k -> Constraint)
(xs :: l) (proxy :: (k -> Constraint) -> *) (f :: k -> *).
(HPure h, AllN h c xs) =>
proxy c -> (forall (a :: k). c a => f a) -> h f xs
hcpure Proxy Arbitrary
p forall a. Arbitrary a => Gen a
arbitrary)
where
p :: Proxy Arbitrary
p :: Proxy Arbitrary
p = forall {k} (t :: k). Proxy t
Proxy