diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+### 0.1.1.0
+
+- Add `Semigroup`, `NFData`, `Hashable` and `Typeable` instances
+
+### 0.1.0.0
+
+- Consider API stable
+
 ### 0.0.7
 
 - `findMin` &amp; `findMax`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
 # range-set-list
 
 [![Build Status](https://travis-ci.org/phadej/range-set-list.svg?branch=travis-expr)](https://travis-ci.org/phadej/range-set-list)
+[![Hackage](https://img.shields.io/hackage/v/range-set-list.svg)](http://hackage.haskell.org/package/range-set-list)
+[![Stackage LTS 2](http://stackage.org/package/range-set-list/badge/lts-2)](http://stackage.org/lts-2/package/range-set-list)
+[![Stackage LTS 3](http://stackage.org/package/range-set-list/badge/lts-3)](http://stackage.org/lts-3/package/range-set-list)
+[![Stackage Nightly](http://stackage.org/package/range-set-list/badge/nightly)](http://stackage.org/nightly/package/range-set-list)
 
 A trivial implementation of range sets.
 
diff --git a/range-set-list.cabal b/range-set-list.cabal
--- a/range-set-list.cabal
+++ b/range-set-list.cabal
@@ -1,9 +1,9 @@
--- This file has been generated from package.yaml by hpack version 0.7.1.
+-- This file has been generated from package.yaml by hpack version 0.8.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:                range-set-list
-version:             0.1.0.0
+version:             0.1.1.0
 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#readme
@@ -12,7 +12,7 @@
 license-file:        LICENSE
 author:              Oleg Grenrus <oleg.grenrus@iki.fi>
 maintainer:          Oleg Grenrus <oleg.grenrus@iki.fi>
-category:            Documentation
+category:            Data
 tested-with:         GHC==7.4.2, GHC==7.6.3, GHC==7.8.4, GHC==7.10.2
 build-type:          Simple
 cabal-version:       >= 1.10
@@ -30,7 +30,10 @@
     src
   ghc-options: -Wall -fwarn-tabs
   build-depends:
-    base >=4.5 && <4.9
+    base        >=4.5      && <4.9,
+    semigroups  >=0.16.2.2 && <0.19,
+    deepseq     >=1.3.0.0  && <1.5,
+    hashable    >=1.2.3.3  && <1.3
   exposed-modules:
     Data.RangeSet.List
   default-language: Haskell2010
@@ -42,7 +45,10 @@
     tests
   ghc-options: -Wall -fwarn-tabs
   build-depends:
-    base >=4.5 && <4.9,
+    base        >=4.5      && <4.9,
+    semigroups  >=0.16.2.2 && <0.19,
+    deepseq     >=1.3.0.0  && <1.5,
+    hashable    >=1.2.3.3  && <1.3,
     containers        >=0.5 && <0.6,
     tasty             >=0.8 && <0.12,
     tasty-quickcheck  >=0.8 && <0.9,
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
@@ -29,7 +29,7 @@
 and there aren't elements in between (not true for 'Float' and 'Double').
 Also 'succ' and 'pred' are never called for largest or smallest value respectively.
 -}
-
+{-# LANGUAGE DeriveDataTypeable #-}
 module Data.RangeSet.List (
   -- * Range set type
   RSet
@@ -77,18 +77,31 @@
 import Prelude hiding (filter,foldl,foldr,null,map)
 import qualified Prelude
 
+import Control.DeepSeq (NFData(..))
+import Data.Typeable (Typeable)
+import Data.Semigroup (Semigroup(..))
 import Data.Monoid (Monoid(..))
+import Data.Hashable (Hashable(..))
 
 -- | Internally set is represented as sorted list of distinct inclusive ranges.
 newtype RSet a = RSet [(a, a)]
-  deriving (Eq, Ord)
+  deriving (Eq, Ord, Typeable)
 
 instance Show a => Show (RSet a) where
   show (RSet xs) = "fromRangeList " ++ show xs
 
+instance (Ord a, Enum a) => Semigroup (RSet a) where
+    (<>) = union
+
 instance (Ord a, Enum a) => Monoid (RSet a) where
     mempty  = empty
     mappend = union
+
+instance Hashable a => Hashable (RSet a) where
+    hashWithSalt salt (RSet xs) = hashWithSalt salt xs
+
+instance NFData a => NFData (RSet a) where
+    rnf (RSet xs) = rnf xs
 
 {- Operators -}
 infixl 9 \\ --
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -10,7 +10,7 @@
 import Control.Applicative
 import Data.Int
 
-import Data.Monoid
+import Data.Semigroup
 
 main :: IO ()
 main = defaultMain tests
