diff --git a/Control/Monad/Trans/Either.hs b/Control/Monad/Trans/Either.hs
--- a/Control/Monad/Trans/Either.hs
+++ b/Control/Monad/Trans/Either.hs
@@ -3,6 +3,8 @@
   ( EitherT(..)
   , eitherT
   , hoistEither
+  , left
+  , right
   ) where
 
 import Control.Applicative
@@ -42,8 +44,17 @@
   Left a -> f a
   Right b -> g b
 
+left :: Monad m => e -> EitherT e m a
+left = EitherT . return . Left
+{-# INLINE left #-}
+
+right :: Monad m => a -> EitherT e m a
+right = return
+{-# INLINE right #-}
+
 hoistEither :: Monad m => Either e a -> EitherT e m a
 hoistEither = EitherT . return
+{-# INLINE hoistEither #-}
 
 instance Functor m => Functor (EitherT e m) where
   fmap f = EitherT . fmap (fmap f) . runEitherT
diff --git a/README.markdown b/README.markdown
new file mode 100644
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,15 @@
+either
+======
+
+[![Build Status](https://secure.travis-ci.org/ekmett/either.png?branch=master)](http://travis-ci.org/ekmett/either)
+
+This provides an either monad transformer that unlike ErrorT is unencumbered by a constraint on its left hand argument. This is needed for a number of applications of this monad transformer, notably in recursion schemes.
+
+Contact Information
+-------------------
+
+Contributions and bug reports are welcome!
+
+Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.
+
+-Edward Kmett
diff --git a/either.cabal b/either.cabal
--- a/either.cabal
+++ b/either.cabal
@@ -1,6 +1,6 @@
 name:          either
 category:      Control, Monads
-version:       3.0
+version:       3.0.1
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -13,7 +13,7 @@
 synopsis:      Haskell 98 either monad transformer
 description:   Haskell 98 either monad transformer
 build-type:    Simple
-extra-source-files: .travis.yml
+extra-source-files: .travis.yml README.markdown
 
 source-repository head
   type: git
