-- |
-- Module : Data.Set
-- Copyright : (c) The University of Glasgow 2001
--- License : BSD-style (see the file libraries/core/LICENSE)
+-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
-- Portability : portable
--
--- $Id: Set.hs,v 1.2 2002/04/24 16:31:40 simonmar Exp $
---
--- This implementation of sets sits squarely upon Data.FiniteMap.
+-- An implementation of sets, based on the "Data.FiniteMap".
--
-----------------------------------------------------------------------------
module Data.Set (
+ -- * The @Set@ type
Set, -- abstract, instance of: Eq
+ -- * Construction
emptySet, -- :: Set a
mkSet, -- :: Ord a => [a] -> Set a
setToList, -- :: Set a -> [a]
unitSet, -- :: a -> Set a
- singletonSet, -- :: a -> Set a
+ -- * Inspection
+ elementOf, -- :: Ord a => a -> Set a -> Bool
+ isEmptySet, -- :: Set a -> Bool
+ cardinality, -- :: Set a -> Int
+
+ -- * Operations
union, -- :: Ord a => Set a -> Set a -> Set a
unionManySets, -- :: Ord a => [Set a] -> Set a
minusSet, -- :: Ord a => Set a -> Set a -> Set a
intersect, -- :: Ord a => Set a -> Set a -> Set a
addToSet, -- :: Ord a => Set a -> a -> Set a
delFromSet, -- :: Ord a => Set a -> a -> Set a
-
- elementOf, -- :: Ord a => a -> Set a -> Bool
- isEmptySet, -- :: Set a -> Bool
-
- cardinality -- :: Set a -> Int
) where
import Prelude
unitSet :: a -> Set a
unitSet x = MkSet (unitFM x ())
-{-# DEPRECATED singletonSet "use Set.unitSet" #-}
-singletonSet = unitSet -- old;deprecated.
-
setToList :: Set a -> [a]
setToList (MkSet set) = keysFM set
(MkSet set_1) == (MkSet set_2) = set_1 == set_2
(MkSet set_1) /= (MkSet set_2) = set_1 /= set_2
+instance Show e => Show (Set e) where
+ showsPrec p s = showsPrec p (setToList s)
+
-- but not so clear what the right thing to do is:
{- NO:
instance (Ord a) => Ord (Set a) where