-- |
-- Copyright: © 2025 Jonathan Knowles
-- License: Apache-2.0
--
module Data.MonoidMap.QuickCheck.Instances.Function ()
where

import Data.Monoid.Null
    ( MonoidNull
    )
import Data.MonoidMap
    ( MonoidMap
    )
import Data.Ord
    ( Ord
    )
import Test.QuickCheck
    ( Function (function)
    , functionMap
    )

import qualified Data.MonoidMap as MonoidMap

instance
    ( Function k
    , Function v
    , Ord k
    , MonoidNull v
    )
    => Function (MonoidMap k v)
  where
    function :: forall b. (MonoidMap k v -> b) -> MonoidMap k v :-> b
function = (MonoidMap k v -> Map k v)
-> (Map k v -> MonoidMap k v)
-> (MonoidMap k v -> b)
-> MonoidMap k v :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap MonoidMap k v -> Map k v
forall k v. MonoidMap k v -> Map k v
MonoidMap.toMap Map k v -> MonoidMap k v
forall v k. MonoidNull v => Map k v -> MonoidMap k v
MonoidMap.fromMap