#if __GLASGOW_HASKELL__ >= 701
#endif
module Generics.Deriving.Eq (
GEq(..)
#if __GLASGOW_HASKELL__ >= 701
#else
, geqdefault
#endif
) where
import Generics.Deriving.Base
import Generics.Deriving.Instances ()
class GEq' f where
geq' :: f a -> f a -> Bool
instance GEq' U1 where
geq' _ _ = True
instance (GEq c) => GEq' (K1 i c) where
geq' (K1 a) (K1 b) = geq a b
instance (GEq' a) => GEq' (M1 i c a) where
geq' (M1 a) (M1 b) = geq' a b
instance (GEq' a, GEq' b) => GEq' (a :+: b) where
geq' (L1 a) (L1 b) = geq' a b
geq' (R1 a) (R1 b) = geq' a b
geq' _ _ = False
instance (GEq' a, GEq' b) => GEq' (a :*: b) where
geq' (a1 :*: b1) (a2 :*: b2) = geq' a1 a2 && geq' b1 b2
class GEq a where
geq :: a -> a -> Bool
#if __GLASGOW_HASKELL__ >= 701
default geq :: (Generic a, GEq' (Rep a)) => a -> a -> Bool
geq x y = geq' (from x) (from y)
#endif
#if __GLASGOW_HASKELL__ >= 701
#else
geqdefault :: (Generic a, GEq' (Rep a)) => a -> a -> Bool
geqdefault x y = geq' (from x) (from y)
#endif
instance GEq Char where geq = (==)
instance GEq Int where geq = (==)
instance GEq Float where geq = (==)
#if __GLASGOW_HASKELL__ < 701
instance (GEq a) => GEq (Maybe a) where
geq = geqdefault
instance (GEq a) => GEq [a] where
geq = geqdefault
#else
instance (GEq a) => GEq (Maybe a)
instance (GEq a) => GEq [a]
#endif