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/Composite.hs b/Simulation/Aivika/Composite.hs
--- a/Simulation/Aivika/Composite.hs
+++ b/Simulation/Aivika/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.Parameter
@@ -84,6 +85,9 @@
        let Composite m' = k a
        (b, h') <- m' h
        return (b, h')
+
+instance MonadFail Composite where
+  fail = error
 
 instance MonadIO Composite where
 
diff --git a/Simulation/Aivika/Internal/Dynamics.hs b/Simulation/Aivika/Internal/Dynamics.hs
--- a/Simulation/Aivika/Internal/Dynamics.hs
+++ b/Simulation/Aivika/Internal/Dynamics.hs
@@ -39,6 +39,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
 
@@ -98,6 +99,9 @@
 instance Applicative Dynamics where
   pure = return
   (<*>) = ap
+
+instance MonadFail Dynamics where
+  fail = error
 
 instance Eq (Dynamics a) where
   x == y = error "Can't compare dynamics." 
diff --git a/Simulation/Aivika/Internal/Event.hs b/Simulation/Aivika/Internal/Event.hs
--- a/Simulation/Aivika/Internal/Event.hs
+++ b/Simulation/Aivika/Internal/Event.hs
@@ -67,6 +67,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
 
@@ -105,6 +106,9 @@
 instance Applicative Event where
   pure = return
   (<*>) = ap
+
+instance MonadFail Event where
+  fail = error
 
 liftME :: (a -> b) -> Event a -> Event b
 {-# INLINE liftME #-}
diff --git a/Simulation/Aivika/Internal/Parameter.hs b/Simulation/Aivika/Internal/Parameter.hs
--- a/Simulation/Aivika/Internal/Parameter.hs
+++ b/Simulation/Aivika/Internal/Parameter.hs
@@ -47,6 +47,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
 
@@ -125,6 +126,9 @@
 instance Applicative Parameter where
   pure = return
   (<*>) = ap
+
+instance MonadFail Parameter where
+  fail = error
 
 instance Eq (Parameter a) where
   x == y = error "Can't compare parameters." 
diff --git a/Simulation/Aivika/Internal/Process.hs b/Simulation/Aivika/Internal/Process.hs
--- a/Simulation/Aivika/Internal/Process.hs
+++ b/Simulation/Aivika/Internal/Process.hs
@@ -104,6 +104,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
 
@@ -455,6 +456,9 @@
 instance Applicative Process where
   pure = return
   (<*>) = ap
+
+instance MonadFail Process where
+  fail = error
 
 instance ParameterLift Process where
   liftParameter = liftPP
diff --git a/Simulation/Aivika/Internal/Simulation.hs b/Simulation/Aivika/Internal/Simulation.hs
--- a/Simulation/Aivika/Internal/Simulation.hs
+++ b/Simulation/Aivika/Internal/Simulation.hs
@@ -39,6 +39,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
 
@@ -121,6 +122,9 @@
 instance Applicative Simulation where
   pure = return
   (<*>) = ap
+
+instance MonadFail Simulation where
+  fail = error
 
 liftMS :: (a -> b) -> Simulation a -> Simulation b
 {-# INLINE liftMS #-}
diff --git a/Simulation/Aivika/Stream/Random.hs b/Simulation/Aivika/Stream/Random.hs
--- a/Simulation/Aivika/Stream/Random.hs
+++ b/Simulation/Aivika/Stream/Random.hs
@@ -44,7 +44,7 @@
 import Simulation.Aivika.Ref
 import Simulation.Aivika.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 :: Parameter (Double, a)
                 -- ^ compute a pair of the delay and event of type @a@
                 -> Stream (Arrival a)
diff --git a/aivika.cabal b/aivika.cabal
--- a/aivika.cabal
+++ b/aivika.cabal
@@ -1,5 +1,5 @@
 name:            aivika
-version:         5.8
+version:         5.9
 synopsis:        A multi-method simulation library
 description:
     Aivika is a discrete event simulation (DES) framework with support of activity-oriented,
@@ -230,7 +230,7 @@
                      Simulation.Aivika.Vector
                      Simulation.Aivika.Vector.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,
