diff --git a/Control/Monad/SearchTree.hs b/Control/Monad/SearchTree.hs
--- a/Control/Monad/SearchTree.hs
+++ b/Control/Monad/SearchTree.hs
@@ -21,6 +21,7 @@
 
 import           Control.Applicative
 import           Control.Monad
+import           Control.Monad.Fix
 
 -- |
 -- The type @SearchTree a@ represents non-deterministic computations
@@ -34,7 +35,7 @@
   fmap f (Choice s t) = Choice (fmap f s) (fmap f t)
 
 instance Applicative SearchTree where
-  pure  = return
+  pure  = One
 
   (<*>) = ap
 
@@ -44,8 +45,6 @@
   (<|>) = mplus
 
 instance Monad SearchTree where
-  return           = One
-
   None >>= _       = None
   One x >>= f      = f x
   Choice s t >>= f = Choice (s >>= f) (t >>= f)
@@ -58,6 +57,19 @@
 
   mplus = Choice
 
+instance MonadFix SearchTree where
+  mfix f = case fix (f . unOne) of
+             None       -> None
+             One x      -> One x
+             Choice _ _ -> Choice (mfix (leftChoice . f)) (mfix (rightChoice . f))
+    where
+      unOne (One x) = x
+      unOne _       = error "mfix SearchTree: not One"
+      leftChoice (Choice s _) = s
+      leftChoice _            = error "mfix SearchTree: not Choice"
+      rightChoice (Choice _ t) = t
+      rightChoice _            = error "mfix SearchTree: not Choice"
+
 -- |
 -- Another search monad based on continuations that produce search
 -- trees.
@@ -74,7 +86,7 @@
   fmap f a = Search (\k -> search a (k . f))
 
 instance Applicative Search where
-  pure  = return
+  pure x = Search ($ x)
 
   (<*>) = ap
 
@@ -84,8 +96,6 @@
   (<|>) = mplus
 
 instance Monad Search where
-  return x = Search ($ x)
-
   a >>= f = Search (\k -> search a (\x -> search (f x) k))
 
 instance MonadFail Search where
@@ -95,3 +105,6 @@
   mzero       = Search (const mzero)
 
   a `mplus` b = Search (\k -> search a k `mplus` search b k)
+
+instance MonadFix Search where
+  mfix f = Search (\k -> mfix (searchTree . f) >>= k)
diff --git a/tree-monad.cabal b/tree-monad.cabal
--- a/tree-monad.cabal
+++ b/tree-monad.cabal
@@ -1,7 +1,7 @@
 cabal-version:       >=1.10
 
 name:                tree-monad
-version:             0.3.1
+version:             0.3.2
 synopsis:            Non-Determinism Monad for Tree Search
 description:         This Haskell library provides an implementation of the
                      MonadPlus type class that represents the search space
@@ -20,7 +20,7 @@
 library
   exposed-modules:     Control.Monad.SearchTree
   other-extensions:    Rank2Types
-  build-depends:       base >=4.13 && <4.15
+  build-depends:       base >=4.13 && <4.16.3
   default-language:    Haskell2010
   ghc-options:         -Wall
 
