{-# LANGUAGE FlexibleContexts , TypeFamilies , UnicodeSyntax #-} -- |FIXME: doc module Data.Eq.Indirect ( Eq'(..) , (==:) , (/=:) , (≡:) , (≢:) , (≠:) ) where import Prelude.Unicode infix 4 ==:{-, /=:, ≡:, ≢:, ≠:-} -- |FIXME: doc class Eq (Unified α) ⇒ Eq' α where -- |FIXME: doc type Unified α -- |FIXME: doc unify ∷ α → Unified α -- |FIXME: doc (==:) ∷ (Eq' α, Eq' β, Unified α ~ Unified β) ⇒ α → β → Bool {-# INLINE (==:) #-} (==:) = (∘ unify) ∘ (≡) ∘ unify -- |FIXME: doc (/=:) ∷ (Eq' α, Eq' β, Unified α ~ Unified β) ⇒ α → β → Bool {-# INLINE (/=:) #-} (/=:) = ((¬) ∘) ∘ (==:) -- |FIXME: doc (≡:) ∷ (Eq' α, Eq' β, Unified α ~ Unified β) ⇒ α → β → Bool {-# INLINE CONLIKE (≡:) #-} (≡:) = (==:) -- |FIXME: doc (≢:) ∷ (Eq' α, Eq' β, Unified α ~ Unified β) ⇒ α → β → Bool {-# INLINE CONLIKE (≢:) #-} (≢:) = (/=:) -- |FIXME: doc (≠:) ∷ (Eq' α, Eq' β, Unified α ~ Unified β) ⇒ α → β → Bool {-# INLINE CONLIKE (≠:) #-} (≠:) = (/=:)