diff --git a/src/NLP/Tokenize/String.hs b/src/NLP/Tokenize/String.hs
--- a/src/NLP/Tokenize/String.hs
+++ b/src/NLP/Tokenize/String.hs
@@ -19,6 +19,7 @@
 import Data.List
 import Data.Maybe
 import Control.Monad.Instances
+import Control.Applicative
 import Data.List.Split
 import Control.Monad
 
@@ -114,6 +115,13 @@
 instance Monad (EitherList a) where
     return x = E [Right x]
     E xs >>= f = E $ concatMap (either (return . Left) (unE . f)) xs
+
+instance Applicative (EitherList a) where
+    pure x = return x
+    f <*> x = f `ap` x
+
+instance Functor (EitherList a) where
+    fmap f (E xs) = E $ (fmap . fmap) f xs
 
 unwrap (Left x) = x
 unwrap (Right x) = x
diff --git a/src/NLP/Tokenize/Text.hs b/src/NLP/Tokenize/Text.hs
--- a/src/NLP/Tokenize/Text.hs
+++ b/src/NLP/Tokenize/Text.hs
@@ -22,6 +22,7 @@
 import qualified Data.Char as Char
 import Data.Maybe
 import Control.Monad.Instances ()
+import Control.Applicative
 import Control.Monad
 
 import Data.Text (Text)
@@ -128,6 +129,13 @@
 instance Monad (EitherList a) where
     return x = E [Right x]
     E xs >>= f = E $ concatMap (either (return . Left) (unE . f)) xs
+
+instance Applicative (EitherList a) where
+    pure x = return x
+    f <*> x = f `ap` x
+
+instance Functor (EitherList a) where
+    fmap f (E xs) = E $ (fmap . fmap) f xs
 
 unwrap :: Either a a -> a
 unwrap (Left x) = x
diff --git a/tokenize.cabal b/tokenize.cabal
--- a/tokenize.cabal
+++ b/tokenize.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.2.2
+Version:             0.3.0
 
 -- A short (one-line) description of the package.
 Synopsis:            Simple tokenizer for English text.
