module Data.Monoid.Coarbitrary where import Test.QuickCheck import qualified Data.Monoid as O last :: (a -> Gen b -> Gen b) -> O.Last a -> Gen b -> Gen b last f (O.Last m) = case m of Nothing -> variant (0 :: Int) Just a -> variant (1 :: Int) . f a first :: (a -> Gen b -> Gen b) -> O.First a -> Gen b -> Gen b first f (O.First m) = case m of Nothing -> variant (0 :: Int) Just a -> variant (1 :: Int) . f a