{-| This function implements equality of values of type @f a@ modulo
the equality of @a@ itself. If two functorial values are equal in this
sense, 'eqMod' returns a 'Just' value containing a list of pairs
consisting of corresponding components of the two functorial
values. -}
eqMod :: (Eq (f ()), Functor f, Foldable f) => f a -> f b -> Maybe [(a,b)]
eqMod s t
    | s `eqF` t = Just args
    | otherwise = Nothing
    where args = Foldable.toList s `zip` Foldable.toList t
eqMod :: (Eq (f ()), Functor f, Foldable f) => f a -> f b -> Maybe [(a,b)]
eqMod s t
    | s `eqF` t = Just args
    | otherwise = Nothing
    where args = Foldable.toList s `zip` Foldable.toList t
eqMod s t
    | s `eqF` t = Just args
    | otherwise = Nothing
    where args = Foldable.toList s `zip` Foldable.toList t