Add instances for Data.Set
authorOleg Grenrus <oleg.grenrus@iki.fi>
Wed, 14 Dec 2016 01:43:15 +0000 (20:43 -0500)
committerDavid Feuer <David.Feuer@gmail.com>
Wed, 14 Dec 2016 01:43:15 +0000 (20:43 -0500)
Add `Eq1`, `Ord1`, and `Show1` instances for `Data.Set`.

Data/Set/Internal.hs

index fa00711..e3eea79 100644 (file)
@@ -229,6 +229,7 @@ import Data.Monoid (Monoid(..))
 #endif
 #if MIN_VERSION_base(4,9,0)
 import Data.Semigroup (Semigroup((<>), stimes), stimesIdempotentMonoid)
+import Data.Functor.Classes
 #endif
 import qualified Data.Foldable as Foldable
 import Data.Typeable
@@ -1061,6 +1062,20 @@ instance Show a => Show (Set a) where
   showsPrec p xs = showParen (p > 10) $
     showString "fromList " . shows (toList xs)
 
+#if MIN_VERSION_base(4,9,0)
+instance Eq1 Set where
+    liftEq eq m n =
+        size m == size n && liftEq eq (toList m) (toList n)
+
+instance Ord1 Set where
+    liftCompare cmp m n =
+        liftCompare cmp (toList m) (toList n)
+
+instance Show1 Set where
+    liftShowsPrec sp sl d m =
+        showsUnaryWith (liftShowsPrec sp sl) "fromList" d (toList m)
+#endif
+
 {--------------------------------------------------------------------
   Read
 --------------------------------------------------------------------}