diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+### 0.0.6
+
+- `size`
+
 ### 0.0.5
 
 - Export `full`
diff --git a/range-set-list.cabal b/range-set-list.cabal
--- a/range-set-list.cabal
+++ b/range-set-list.cabal
@@ -1,5 +1,5 @@
 name:                range-set-list
-version:             0.0.5
+version:             0.0.6
 synopsis:            Memory efficient sets with continuous ranges of elements.
 description:         Memory efficient sets with continuous ranges of elements. List based implementation. Interface mimics "Data.Set" interface where possible.
 homepage:            https://github.com/phadej/range-set-list
diff --git a/src/Data/RangeSet/List.hs b/src/Data/RangeSet/List.hs
--- a/src/Data/RangeSet/List.hs
+++ b/src/Data/RangeSet/List.hs
@@ -39,6 +39,7 @@
 
   -- * Query
   , null
+  , size
   , member
   , notMember
 
@@ -97,6 +98,11 @@
 -- | /O(1)/. Is this the empty set?
 null :: RSet a -> Bool
 null = Prelude.null . toRangeList
+
+-- | /O(n)/. The number of the elements in the set.
+size :: Enum a => RSet a -> Int
+size (RSet xs) = sum (Prelude.map f xs)
+  where f (a, b) = fromEnum b - fromEnum a + 1
 
 -- | /O(n)/. Is the element in the set?
 member :: (Ord a, Enum a) => a -> RSet a -> Bool
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -67,6 +67,9 @@
 elementsProp :: SetAction Int -> Property
 elementsProp seta = Set.elems (toSet seta) === RSet.elems (toRSet seta)
 
+sizeProp :: SetAction Int -> Property
+sizeProp seta = Set.size (toSet seta) === RSet.size (toRSet seta)
+
 nullProp :: SetAction Int -> Property
 nullProp seta = Set.null (toSet seta) === RSet.null (toRSet seta)
 
@@ -141,8 +144,9 @@
 -- Complement laws
 complementProps :: TestTree
 complementProps = testGroup "complement"
-  [ QC.testProperty "definition" (\a e -> RSet.member e (rs a) === RSet.notMember e (RSet.complement (rs a)))
-  , QC.testProperty "involutive" (\a -> rs a === RSet.complement (RSet.complement (rs a)))
+  [ QC.testProperty "definition"   (\a e -> RSet.member e (rs a) === RSet.notMember e (RSet.complement (rs a)))
+  , QC.testProperty "involutive"   (\a -> rs a === RSet.complement (RSet.complement (rs a)))
+  , QC.testProperty "(full \\\\)"  (\a -> RSet.complement (rs a) === RSet.full RSet.\\ (rs a))
   ]
   where rs = rangeToRSet :: RSetAction Int -> RSet Int
 
@@ -159,6 +163,7 @@
 qcProps :: TestTree
 qcProps = testGroup "QuickCheck properties"
   [ QC.testProperty "element operations similar" elementsProp
+  , QC.testProperty "size consistent" sizeProp
   , QC.testProperty "null operation similar" nullProp
   , QC.testProperty "member operation similar" memberProp
   , QC.testProperty "notMember operation similar" notMemberProp
