diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,4 +30,12 @@
 
 # 1.2.0.0 -- 2022-07-20
 
-* Major bug correction : instance Foldable removed for Data.WeakMap and Data.WeakSet
+* Major bug correction : instance Foldable removed for Data.WeakMap and Data.WeakSet
+
+# 1.2.1.0 -- 2022-07-23
+
+* Adding anElement function
+
+# 1.2.2.0 -- 2022-07-24
+
+* Adding enumerateMaps function
diff --git a/WeakSets.cabal b/WeakSets.cabal
--- a/WeakSets.cabal
+++ b/WeakSets.cabal
@@ -14,7 +14,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:            1.2.0.0
+version:            1.2.2.0
 
 -- A short (one-line) description of the package.
 synopsis:
diff --git a/src/Data/WeakMap.hs b/src/Data/WeakMap.hs
--- a/src/Data/WeakMap.hs
+++ b/src/Data/WeakMap.hs
@@ -212,6 +212,7 @@
     , memorizeFunction
     , inverse
     , pseudoInverse
+    , enumerateMaps
 ) where
 import           Prelude  hiding      (lookup, map, filter, drop, take, splitAt, foldr, foldl, null)
 import           Data.WeakSet         (Set)
@@ -939,3 +940,9 @@
 pseudoInverse :: Map k v -> Map v k
 pseudoInverse (Map al) = Map $ (\(k,v) -> (v,k)) <$> al
 
+-- | Return all Functions from a domain to a codomain.
+enumerateMaps :: (Eq a, Eq b) =>
+                    Set a -- ^ Domain.
+                 -> Set b -- ^ Codomain.
+                 -> Set (Map a b) -- ^ All maps from domain to codomain.
+enumerateMaps dom codom = set $ weakMap <$> zip (setToList dom) <$> setToList (codom |^| (cardinal dom))
diff --git a/src/Data/WeakMap/Safe.hs b/src/Data/WeakMap/Safe.hs
--- a/src/Data/WeakMap/Safe.hs
+++ b/src/Data/WeakMap/Safe.hs
@@ -24,6 +24,7 @@
     , image
     , inverse
     , pseudoInverse
+    , enumerateMaps
 )
 where
     import              Data.WeakMap
diff --git a/src/Data/WeakSet.hs b/src/Data/WeakSet.hs
--- a/src/Data/WeakSet.hs
+++ b/src/Data/WeakSet.hs
@@ -145,6 +145,7 @@
     -- * Others
     , traverseSet
     , sequenceSet
+    , anElement
     
 ) where
 import              Prelude         hiding (filter, splitAt, drop, take, map, foldr, foldl, null, and, or)
@@ -543,4 +544,9 @@
 
 -- | Disjunction of a set of booleans.
 or :: Set Bool -> Bool
-or (Set xs) = Foldable.or xs
+or (Set xs) = Foldable.or xs
+
+-- | /O(1)/. Returns an element of the set if it is not empty, throw an error otherwise.
+anElement :: Set a -> a
+anElement (Set []) = error "Data.WeakSet.anElement: empty set"
+anElement (Set (x:xs)) = x
diff --git a/src/Data/WeakSet/Safe.hs b/src/Data/WeakSet/Safe.hs
--- a/src/Data/WeakSet/Safe.hs
+++ b/src/Data/WeakSet/Safe.hs
@@ -24,6 +24,7 @@
     (|-|),
     (|^|),
     nubSetBy,
+    anElement,
 )
 where
     import              Data.WeakSet
