module Data.Map.Coarbitrary where

import Prelude hiding (map)
import qualified Data.Map as M
import Test.QuickCheck

map
  :: Ord k
  => ((k, a) -> Gen r -> Gen r)
  -> M.Map k a
  -> Gen r
  -> Gen r
map f m = go $ M.toList m
  where
    go ls = case ls of
      [] -> variant (0 :: Int)
      x:xs -> variant (1 :: Int) . f x . go xs