--- /dev/null
+{-# 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 (≠:) #-}
+(≠:) = (/=:)