    {-# OPTIONS_GHC -fno-warn-orphans #-}
    module Data.Binary.Instances.UnorderedContainers where

    import Data.Binary         (Binary, get, put)
    import Data.Binary.Orphans ()

    import qualified Data.Hashable     as Hashable
    import qualified Data.HashMap.Lazy as HM
    import qualified Data.HashSet      as HS

    instance  (Hashable.Hashable k, Eq k, Binary k, Binary v) => Binary (HM.HashMap k v) where
        get :: Get (HashMap k v)
    get = ([(k, v)] -> HashMap k v) -> Get [(k, v)] -> Get (HashMap k v)
    forall a b. (a -> b) -> Get a -> Get b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap [(k, v)] -> HashMap k v
    forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
    HM.fromList Get [(k, v)]
    forall t. Binary t => Get t
    get
        put :: HashMap k v -> Put
    put = [(k, v)] -> Put
    forall t. Binary t => t -> Put
    put ([(k, v)] -> Put)
    -> (HashMap k v -> [(k, v)]) -> HashMap k v -> Put
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . HashMap k v -> [(k, v)]
    forall k v. HashMap k v -> [(k, v)]
    HM.toList

    instance (Hashable.Hashable v, Eq v, Binary v) => Binary (HS.HashSet v) where
        get :: Get (HashSet v)
    get = ([v] -> HashSet v) -> Get [v] -> Get (HashSet v)
    forall a b. (a -> b) -> Get a -> Get b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap [v] -> HashSet v
    forall a. (Eq a, Hashable a) => [a] -> HashSet a
    HS.fromList Get [v]
    forall t. Binary t => Get t
    get
        put :: HashSet v -> Put
    put = [v] -> Put
    forall t. Binary t => t -> Put
    put ([v] -> Put) -> (HashSet v -> [v]) -> HashSet v -> Put
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . HashSet v -> [v]
    forall a. HashSet a -> [a]
    HS.toList