{-# LANGUAGE TypeOperators #-}
module Cubix.Sin.Compdata.Instances (
) where
import Data.Comp.Multi.Equality ( EqHF(..) )
import Data.Comp.Multi.Ops ( (:&:)(..) )
import Data.Comp.Multi.Ordering ( OrdHF(..) )
instance (EqHF f, Eq a) => EqHF (f :&: a) where
(f g i
v1 :&: a
c1) eqHF :: forall (g :: * -> *) i j.
KEq g =>
(:&:) f a g i -> (:&:) f a g j -> Bool
`eqHF` (f g j
v2 :&: a
c2) = (f g i
v1 f g i -> f g j -> Bool
forall (g :: * -> *) i j. KEq g => f g i -> f g j -> Bool
forall (f :: (* -> *) -> * -> *) (g :: * -> *) i j.
(EqHF f, KEq g) =>
f g i -> f g j -> Bool
`eqHF` f g j
v2) Bool -> Bool -> Bool
&& (a
c1 a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
c2)
instance (OrdHF f, Ord a) => OrdHF (f :&: a) where
(f a i
v1 :&: a
c1) compareHF :: forall (a :: * -> *) i j.
KOrd a =>
(:&:) f a a i -> (:&:) f a a j -> Ordering
`compareHF` (f a j
v2 :&: a
c2) = case f a i
v1 f a i -> f a j -> Ordering
forall (a :: * -> *) i j. KOrd a => f a i -> f a j -> Ordering
forall (f :: (* -> *) -> * -> *) (a :: * -> *) i j.
(OrdHF f, KOrd a) =>
f a i -> f a j -> Ordering
`compareHF` f a j
v2 of
Ordering
EQ -> a
c1 a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` a
c2
Ordering
x -> Ordering
x