diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,10 @@
 
+Version 5.9
+-----
+
+* Added the support of GHC 8.6 and dropped the support of old versions
+  that do not have Monad.Fail.
+
 Version 5.8
 -----
 
diff --git a/Simulation/Aivika/Trans/Agent.hs b/Simulation/Aivika/Trans/Agent.hs
--- a/Simulation/Aivika/Trans/Agent.hs
+++ b/Simulation/Aivika/Trans/Agent.hs
@@ -222,8 +222,10 @@
          "Use the setStateTransition function to define " ++
          "the transition state: activateState."
        ProcessingMode ->
-         do x0 @ (Just st0) <- invokeEvent p $ readRef (agentStateRef agent)
-            invokeEvent p $ traversePath x0 st
+         do x0 <- invokeEvent p $ readRef (agentStateRef agent)
+            case x0 of
+              Just st0 -> invokeEvent p $ traversePath x0 st
+              Nothing  -> error "Pattern match failed: selectState"
 
 -- | Set the activation computation for the specified state.
 setStateActivation :: MonadDES m => AgentState m -> Event m () -> Event m ()
diff --git a/Simulation/Aivika/Trans/Composite.hs b/Simulation/Aivika/Trans/Composite.hs
--- a/Simulation/Aivika/Trans/Composite.hs
+++ b/Simulation/Aivika/Trans/Composite.hs
@@ -28,6 +28,7 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Fix
+import Control.Monad.Fail
 import Control.Applicative
 
 import Simulation.Aivika.Trans.Comp
@@ -96,6 +97,11 @@
        let Composite m' = k a
        (b, h') <- m' h
        return (b, h')
+
+instance Monad m => MonadFail (Composite m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 instance (Monad m, MonadIO (Event m)) => MonadIO (Composite m) where
 
diff --git a/Simulation/Aivika/Trans/Internal/Dynamics.hs b/Simulation/Aivika/Trans/Internal/Dynamics.hs
--- a/Simulation/Aivika/Trans/Internal/Dynamics.hs
+++ b/Simulation/Aivika/Trans/Internal/Dynamics.hs
@@ -37,6 +37,7 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Fix
+import Control.Monad.Fail
 import qualified Control.Monad.Catch as MC
 import Control.Applicative
 
@@ -103,6 +104,11 @@
   
   {-# INLINE (<*>) #-}
   (Dynamics x) <*> (Dynamics y) = Dynamics $ \p -> x p <*> y p
+
+instance Monad m => MonadFail (Dynamics m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 liftMD :: Monad m => (a -> b) -> Dynamics m a -> Dynamics m b
 {-# INLINE liftMD #-}
diff --git a/Simulation/Aivika/Trans/Internal/Event.hs b/Simulation/Aivika/Trans/Internal/Event.hs
--- a/Simulation/Aivika/Trans/Internal/Event.hs
+++ b/Simulation/Aivika/Trans/Internal/Event.hs
@@ -62,6 +62,7 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Fix
+import Control.Monad.Fail
 import qualified Control.Monad.Catch as MC
 import Control.Applicative
 
@@ -101,6 +102,11 @@
   
   {-# INLINE (<*>) #-}
   (Event x) <*> (Event y) = Event $ \p -> x p <*> y p
+
+instance Monad m => MonadFail (Event m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 instance MonadTrans Event where
 
diff --git a/Simulation/Aivika/Trans/Internal/Parameter.hs b/Simulation/Aivika/Trans/Internal/Parameter.hs
--- a/Simulation/Aivika/Trans/Internal/Parameter.hs
+++ b/Simulation/Aivika/Trans/Internal/Parameter.hs
@@ -45,6 +45,7 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Fix
+import Control.Monad.Fail
 import qualified Control.Monad.Catch as MC
 import Control.Applicative
 
@@ -129,6 +130,11 @@
   
   {-# INLINE (<*>) #-}
   (Parameter x) <*> (Parameter y) = Parameter $ \r -> x r <*> y r
+
+instance Monad m => MonadFail (Parameter m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 liftMP :: Monad m => (a -> b) -> Parameter m a -> Parameter m b
 {-# INLINE liftMP #-}
diff --git a/Simulation/Aivika/Trans/Internal/Process.hs b/Simulation/Aivika/Trans/Internal/Process.hs
--- a/Simulation/Aivika/Trans/Internal/Process.hs
+++ b/Simulation/Aivika/Trans/Internal/Process.hs
@@ -100,6 +100,7 @@
 import Control.Exception
 import Control.Monad
 import Control.Monad.Trans
+import Control.Monad.Fail
 import qualified Control.Monad.Catch as MC
 import Control.Applicative
 
@@ -499,6 +500,11 @@
   
   {-# INLINE (<*>) #-}
   (Process x) <*> (Process y) = Process $ \pid -> x pid <*> y pid
+
+instance MonadDES m => MonadFail (Process m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 instance (MonadDES m, MonadIO m) => MonadIO (Process m) where
   
diff --git a/Simulation/Aivika/Trans/Internal/Simulation.hs b/Simulation/Aivika/Trans/Internal/Simulation.hs
--- a/Simulation/Aivika/Trans/Internal/Simulation.hs
+++ b/Simulation/Aivika/Trans/Internal/Simulation.hs
@@ -33,6 +33,7 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Fix
+import Control.Monad.Fail
 import qualified Control.Monad.Catch as MC
 import Control.Applicative
 
@@ -116,6 +117,11 @@
   
   {-# INLINE (<*>) #-}
   (Simulation x) <*> (Simulation y) = Simulation $ \r -> x r <*> y r
+
+instance Monad m => MonadFail (Simulation m) where
+
+  {-# INLINE fail #-}
+  fail = error
 
 liftMS :: Monad m => (a -> b) -> Simulation m a -> Simulation m b
 {-# INLINE liftMS #-}
diff --git a/Simulation/Aivika/Trans/Stream/Random.hs b/Simulation/Aivika/Trans/Stream/Random.hs
--- a/Simulation/Aivika/Trans/Stream/Random.hs
+++ b/Simulation/Aivika/Trans/Stream/Random.hs
@@ -45,7 +45,7 @@
 import Simulation.Aivika.Trans.Ref
 import Simulation.Aivika.Trans.Arrival
 
--- | Return a sream of random events that arrive with the specified delay.
+-- | Return a stream of random events that arrive with the specified delay.
 randomStream :: MonadDES m
                 => Parameter m (Double, a)
                 -- ^ compute a pair of the delay and event of type @a@
diff --git a/aivika-transformers.cabal b/aivika-transformers.cabal
--- a/aivika-transformers.cabal
+++ b/aivika-transformers.cabal
@@ -1,5 +1,5 @@
 name:            aivika-transformers
-version:         5.8
+version:         5.9
 synopsis:        Transformers for the Aivika simulation library
 description:
     This package is a generalization of the aivika [1] simulation library
@@ -168,7 +168,7 @@
                      Simulation.Aivika.IO.Var
                      Simulation.Aivika.IO.Var.Unboxed
 
-    build-depends:   base >= 4.6.0.0 && < 6,
+    build-depends:   base >= 4.9.0.0 && < 6,
                      mtl >= 2.1.1,
                      array >= 0.3.0.0,
                      containers >= 0.4.0.0,
@@ -177,7 +177,7 @@
                      vector >= 0.10.0.1,
                      semigroups >= 0.10,
                      exceptions >= 0.9.0,
-                     aivika >= 5.8
+                     aivika >= 5.9
 
     other-extensions:   FlexibleContexts,
                         FlexibleInstances,
