simplistic-generics-2.0.0: src/Generics/Simplistic/Derive/Eq.hs
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
module Generics.Simplistic.Derive.Eq where
import Data.Proxy
import Generics.Simplistic
import Generics.Simplistic.Util
geq' :: (OnLeaves Eq f) => SRep I f -> SRep I f -> Bool
geq' x y = maybe False sameLeaves $ zipSRep x y
where
sameLeaves :: (OnLeaves Eq f) => SRep (I :*: I) f -> Bool
sameLeaves = repLeavesC (Proxy :: Proxy Eq) (uncurry' (==)) (&&) True
geq :: (Generic a, GShallow (Rep a), OnLeaves Eq (Rep a))
=> a -> a -> Bool
geq x y = geq' (fromS x) (fromS y)