diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,3 +2,7 @@
 
 ## 0.2.0.0 -- 2021-03-15
 * First official version. 
+
+## 0.3.0.0 -- 2021-03-16
+* Require that definitional interpreters return configurations in the Maybe monad.
+  This adds support for run-time errors by returning Nothing when an errors occurs.
diff --git a/Language/Explorer/Basic.hs b/Language/Explorer/Basic.hs
--- a/Language/Explorer/Basic.hs
+++ b/Language/Explorer/Basic.hs
@@ -45,20 +45,14 @@
 deref = ExplorerM.deref
 
 -- This should be able with func composition.
-wrap :: Monad m => (a -> b -> b) -> a -> b -> m (b, ())
+wrap :: Monad m => (a -> b -> Maybe b) -> a -> b -> m (Maybe b, ())
 wrap def p e = return $ (def p e, ())
 
 -- Constructor for a exploring interpreter.
-mkExplorerStack:: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b
+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b) => (a -> b -> Maybe b) -> b -> Explorer a b
 mkExplorerStack definterp conf = ExplorerM.mkExplorerStack (wrap definterp) conf
-
-mkExplorerTree:: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b
 mkExplorerTree definterp conf = ExplorerM.mkExplorerTree (wrap definterp) conf
-
-mkExplorerGraph :: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b
 mkExplorerGraph definterp conf = ExplorerM.mkExplorerGraph (wrap definterp) conf
-
-mkExplorerGSS :: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b
 mkExplorerGSS definterp conf = ExplorerM.mkExplorerGSS (wrap definterp) conf
 
 execute :: (Eq c, Eq p) =>  p -> Explorer p c -> Explorer p c
diff --git a/Language/Explorer/Monadic.hs b/Language/Explorer/Monadic.hs
--- a/Language/Explorer/Monadic.hs
+++ b/Language/Explorer/Monadic.hs
@@ -41,7 +41,7 @@
     Explorer :: (Show programs, Eq programs, Eq configs, Monad m, Monoid output) =>
         { sharing :: Bool
         , backTracking :: Bool
-        , defInterp :: programs -> configs -> m (configs, output)
+        , defInterp :: programs -> configs -> m (Maybe configs, output)
         , config :: configs -- Cache the config
         , currRef :: Ref
         , genRef :: Ref
@@ -50,7 +50,7 @@
         } -> Explorer programs m configs output
 
 mkExplorer :: (Show a, Eq a, Eq b, Monad m, Monoid o) =>
-  Bool -> Bool -> (a -> b -> m (b,o)) -> b -> Explorer a m b o
+  Bool -> Bool -> (a -> b -> m (Maybe b,o)) -> b -> Explorer a m b o
 mkExplorer share backtrack definterp conf = Explorer
     { defInterp = definterp
     , config = conf
@@ -65,7 +65,7 @@
 initialRef :: Int
 initialRef = 1
 
-mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b,o)) -> b -> Explorer a m b o
+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b,o)) -> b -> Explorer a m b o
 mkExplorerStack = mkExplorer False True
 mkExplorerTree  = mkExplorer False False
 mkExplorerGraph = mkExplorer True False
@@ -95,11 +95,11 @@
         else addNewPath e p output newconf
 
 execute :: (Eq c, Eq p, Eq o, Monad m, Monoid o) =>  p -> Explorer p m c o -> m (Explorer p m c o, o)
-execute p e = do
-    (newconf,out) <- defInterp e p (config e)
-    return $ (updateConf e (p, newconf, out), out)
-
-
+execute p e =
+  do (mcfg, o) <- defInterp e p (config e)
+     case mcfg of
+       Just cfg -> return $ (updateConf e (p, cfg, o), o)
+       Nothing  -> return (e, o)
 
 executeAll :: (Eq c, Eq p, Eq o, Monad m, Monoid o) => [p] -> Explorer p m c o -> m (Explorer p m c o, o)
 executeAll ps exp = foldlM executeCollect (exp, mempty) ps
diff --git a/Language/Explorer/Pure.hs b/Language/Explorer/Pure.hs
--- a/Language/Explorer/Pure.hs
+++ b/Language/Explorer/Pure.hs
@@ -42,10 +42,10 @@
 deref :: Explorer p c o -> Ref -> Maybe c
 deref = ExplorerM.deref
 
-wrap :: (Monad m, Monoid o) => (a -> b -> (b,o)) -> a -> b -> m (b, o)
+wrap :: (Monad m, Monoid o) => (a -> b -> (Maybe b,o)) -> a -> b -> m (Maybe b, o)
 wrap def p e = return $ def p e
 
-mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS:: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b,o)) -> b -> Explorer a b o
+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS:: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b,o)) -> b -> Explorer a b o
 mkExplorerStack definterp conf = ExplorerM.mkExplorerStack (wrap definterp) conf
 mkExplorerTree definterp conf = ExplorerM.mkExplorerTree (wrap definterp) conf
 mkExplorerGraph definterp conf = ExplorerM.mkExplorerGraph (wrap definterp) conf
diff --git a/examples/Whilelang.hs b/examples/Whilelang.hs
--- a/examples/Whilelang.hs
+++ b/examples/Whilelang.hs
@@ -112,13 +112,13 @@
 initialConfig = Config {cfgStore = Map.empty, cfgOutput = []}
 
 -- Definitial interpreter for the while language.
-definterp :: Command -> Config -> Config
-definterp c cfg = cfg {cfgStore = newstore, cfgOutput = cfgOutput cfg ++ newout}
+definterp :: Command -> Config -> Maybe Config
+definterp c cfg = Just cfg {cfgStore = newstore, cfgOutput = cfgOutput cfg ++ newout}
     where ((_, newout), newstore) = runState (runWriterT (evalCommand' c)) (cfgStore cfg)
 
 
-definterpO :: Command -> Config -> (Config, [String])
-definterpO c cfg = (cfg {cfgStore = newstore}, newout)
+definterpO :: Command -> Config -> (Maybe Config, [String])
+definterpO c cfg = (Just $ cfg {cfgStore = newstore}, newout)
     where ((_, newout), newstore) = runState (runWriterT (evalCommand' c)) (cfgStore cfg)
 
 
@@ -218,7 +218,7 @@
 whileGraph = E.mkExplorerGraph definterp initialConfig
 
 whileGraphM :: WhileExplorerM
-whileGraphM = EM.mkExplorerGraph (\p c -> (\c -> (c,())) <$> definterpM p c) initialConfig
+whileGraphM = EM.mkExplorerGraph (\p c -> (\c -> (Just c,())) <$> definterpM p c) initialConfig
 
 whileGraphO :: WhileExplorerO
 whileGraphO = EP.mkExplorerGraph definterpO initialConfig
diff --git a/exploring-interpreters.cabal b/exploring-interpreters.cabal
--- a/exploring-interpreters.cabal
+++ b/exploring-interpreters.cabal
@@ -1,7 +1,7 @@
 cabal-version:       >=1.10
 
 name:                exploring-interpreters
-version:             0.2.0.0
+version:             0.3.0.0
 synopsis:            A generic exploring interpreter for exploratory programming
 -- synopsis:
 -- description:
