diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,6 @@
+
+## 0.2.2.0
+
+*   Added new functions maybeToEither, maybeToEitherOr, and eitherToMaybe for
+    converting between `Maybe` and `Either`.
+    [#1](https://github.com/cdepillabout/from-sum/pull/1)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@
 [![Hackage](https://img.shields.io/hackage/v/from-sum.svg)](https://hackage.haskell.org/package/from-sum)
 [![Stackage LTS](http://stackage.org/package/from-sum/badge/lts)](http://stackage.org/lts/package/from-sum)
 [![Stackage Nightly](http://stackage.org/package/from-sum/badge/nightly)](http://stackage.org/nightly/package/from-sum)
+![BSD3 license](https://img.shields.io/badge/license-BSD3-blue.svg)
 
 This Haskell module exports the `fromEitherM` and `fromMaybeM` convenience
 functions.
diff --git a/from-sum.cabal b/from-sum.cabal
--- a/from-sum.cabal
+++ b/from-sum.cabal
@@ -1,23 +1,24 @@
 name:                from-sum
-version:             0.2.1.0
+version:             0.2.2.0
 synopsis:            Canonical fromMaybeM and fromEitherM functions.
-description:         Please see README.md
+description:         Provides many functions for working with 'Maybe' and 'Either'.  Please see @README.md@.
 homepage:            https://github.com/cdepillabout/from-sum
 license:             BSD3
 license-file:        LICENSE
 author:              Dennis Gosnell
 maintainer:          cdep.illabout@gmail.com
-copyright:           2016 Dennis Gosnell
+copyright:           2016-2019 Dennis Gosnell
 category:            Control
 build-type:          Simple
 extra-source-files:  README.md
+                     CHANGELOG.md
 cabal-version:       >=1.10
 
 library
   hs-source-dirs:      src
   exposed-modules:     Control.FromSum
   build-depends:       base >= 4.6 && < 5
-                     , mtl
+                     , transformers
   default-language:    Haskell2010
   ghc-options:         -Wall
 
diff --git a/src/Control/FromSum.hs b/src/Control/FromSum.hs
--- a/src/Control/FromSum.hs
+++ b/src/Control/FromSum.hs
@@ -31,6 +31,10 @@
   , fromEitherOr
   , fromMaybe
   , fromMaybeOr
+    -- * Converting from 'Maybe' to 'Either'
+  , maybeToEither
+  , maybeToEitherOr
+  , eitherToMaybe
     -- * Collapsing funtions
   , collapseEither
   , collapseExceptT
@@ -42,7 +46,7 @@
 import Control.Applicative
 #endif
 import Control.Monad ((<=<))
-import Control.Monad.Except (ExceptT, runExceptT)
+import Control.Monad.Trans.Except (ExceptT, runExceptT)
 import Data.Maybe (fromMaybe)
 
 -- | A monadic version of 'fromEither'.
@@ -244,10 +248,50 @@
 
 -- | Similar to 'collapseEither', but for 'ExceptT'.
 --
--- >>> import Control.Monad.Except (ExceptT(ExceptT))
+-- >>> import Control.Monad.Trans.Except (ExceptT(ExceptT))
 -- >>> collapseExceptT (ExceptT $ pure (Right 3))
 -- 3
 -- >>> collapseExceptT (ExceptT $ pure (Left "hello"))
 -- "hello"
 collapseExceptT :: Monad m => ExceptT a m a -> m a
 collapseExceptT = pure . collapseEither <=< runExceptT
+
+-- | Convert a 'Maybe' to an 'Either'.
+--
+-- If the 'Maybe' is 'Just', then return the value in 'Right'.
+--
+-- >>> maybeToEither 3 $ Just "hello"
+-- Right "hello"
+--
+-- If the 'Maybe' is 'Nothing', then use the given @e@ as 'Left'.
+--
+-- >>> maybeToEither 3 Nothing
+-- Left 3
+maybeToEither :: e -> Maybe a -> Either e a
+maybeToEither e Nothing = Left e
+maybeToEither _ (Just a) = Right a
+
+-- | A 'flip'ed version of 'maybeToEither'.
+--
+-- >>> maybeToEitherOr (Just "hello") 3
+-- Right "hello"
+--
+-- >>> maybeToEitherOr Nothing 3
+-- Left 3
+maybeToEitherOr :: Maybe a -> e -> Either e a
+maybeToEitherOr = flip maybeToEither
+
+-- | Convert an 'Either' to a 'Maybe'.
+--
+-- A 'Right' value becomes 'Just'.
+--
+-- >>> eitherToMaybe $ Right 3
+-- Just 3
+--
+-- A 'Left' value becomes 'Nothing'.
+--
+-- >>> eitherToMaybe $ Left "bye"
+-- Nothing
+eitherToMaybe :: Either e a -> Maybe a
+eitherToMaybe (Left _) = Nothing
+eitherToMaybe (Right a) = Just a
