diff --git a/random-shuffle.cabal b/random-shuffle.cabal
--- a/random-shuffle.cabal
+++ b/random-shuffle.cabal
@@ -1,7 +1,7 @@
 cabal-version:    >= 1.6
 build-type:       Simple
 name:             random-shuffle
-version:          0.0.3
+version:          0.0.4
 license:          BSD3
 license-file:     LICENSE
 category:         System
diff --git a/src/System/Random/Shuffle.hs b/src/System/Random/Shuffle.hs
--- a/src/System/Random/Shuffle.hs
+++ b/src/System/Random/Shuffle.hs
@@ -16,7 +16,7 @@
 
 import Data.Function (fix)
 import System.Random (RandomGen, randomR)
-import Control.Monad (liftM2)
+import Control.Monad (liftM,liftM2)
 import Control.Monad.Random (MonadRandom, getRandomR)
 
 
@@ -100,8 +100,10 @@
 
 -- |shuffle' wrapped in a random monad
 shuffleM :: (MonadRandom m) => [a] -> m [a]
-shuffleM elements = return . shuffle elements =<< rseqM (length elements - 1)
+shuffleM elements
+    | null elements = return []
+    | otherwise     = liftM (shuffle elements) (rseqM (length elements - 1))
   where
     rseqM :: (MonadRandom m) => Int -> m [Int]
     rseqM 0 = return []
-    rseqM i = (:) `liftM2` getRandomR (0, i) $ rseqM (i - 1)
+    rseqM i = liftM2 (:) (getRandomR (0, i)) (rseqM (i - 1))
