]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Data/Eq/Indirect.hs
New module: Data.Eq.Indirect providing Eq' type class.
[Lucu.git] / Data / Eq / Indirect.hs
diff --git a/Data/Eq/Indirect.hs b/Data/Eq/Indirect.hs
new file mode 100644 (file)
index 0000000..a7aa8d1
--- /dev/null
@@ -0,0 +1,50 @@
+{-# 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 (≠:) #-}
+(≠:) = (/=:)