diff --git a/Simulation/Aivika/IO/DES.hs b/Simulation/Aivika/IO/DES.hs
--- a/Simulation/Aivika/IO/DES.hs
+++ b/Simulation/Aivika/IO/DES.hs
@@ -27,6 +27,6 @@
 import Simulation.Aivika.IO.QueueStrategy
 
 -- | A template-based instantiation of the 'MonadDES' type class.
-instance (MonadComp m, MonadIO m, MonadTemplate m) => MonadDES m where
+instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m) => MonadDES m where
 
   {-# SPECIALISE instance MonadDES IO #-}
diff --git a/Simulation/Aivika/IO/Dynamics/Memo.hs b/Simulation/Aivika/IO/Dynamics/Memo.hs
--- a/Simulation/Aivika/IO/Dynamics/Memo.hs
+++ b/Simulation/Aivika/IO/Dynamics/Memo.hs
@@ -31,7 +31,7 @@
 import Simulation.Aivika.Trans.Array
 
 -- | The 'MonadIO' based monad is an instance of the 'MonadMemo' type class.
-instance (MonadIO m, MonadTemplate m) => MonadMemo m where
+instance (Monad m, MonadIO m, MonadTemplate m) => MonadMemo m where
 
   {-# SPECIALISE instance MonadMemo IO #-}
 
diff --git a/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs b/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
--- a/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
+++ b/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
@@ -31,7 +31,7 @@
 import Simulation.Aivika.Trans.Array
 
 -- | The 'MonadIO' based monad is an instance of the 'MonadMemo' type class.
-instance (MonadIO m, MonadTemplate m, MArray IOUArray e IO) => MonadMemo m e where
+instance (Monad m, MonadIO m, MonadTemplate m, MArray IOUArray e IO) => MonadMemo m e where
 
   {-# SPECIALISE instance MonadMemo IO Double #-}
   {-# SPECIALISE instance MonadMemo IO Float #-}
diff --git a/Simulation/Aivika/IO/Event.hs b/Simulation/Aivika/IO/Event.hs
--- a/Simulation/Aivika/IO/Event.hs
+++ b/Simulation/Aivika/IO/Event.hs
@@ -28,7 +28,7 @@
 import Simulation.Aivika.Trans.Internal.Types
 
 -- | A template-based implementation of the 'EventQueueing' type class.
-instance (MonadIO m, MonadTemplate m) => EventQueueing m where
+instance (Monad m, MonadIO m, MonadTemplate m) => EventQueueing m where
 
   {-# SPECIALISE instance EventQueueing IO #-}
 
diff --git a/Simulation/Aivika/IO/Generator.hs b/Simulation/Aivika/IO/Generator.hs
--- a/Simulation/Aivika/IO/Generator.hs
+++ b/Simulation/Aivika/IO/Generator.hs
@@ -25,7 +25,7 @@
 import Simulation.Aivika.Trans.Generator.Primitive
 import Simulation.Aivika.Trans.Template
 
-instance (Functor m, MonadIO m, MonadTemplate m) => MonadGenerator m where
+instance (Functor m, Monad m, MonadIO m, MonadTemplate m) => MonadGenerator m where
 
   {-# SPECIALISE instance MonadGenerator IO #-}
 
diff --git a/Simulation/Aivika/IO/QueueStrategy.hs b/Simulation/Aivika/IO/QueueStrategy.hs
--- a/Simulation/Aivika/IO/QueueStrategy.hs
+++ b/Simulation/Aivika/IO/QueueStrategy.hs
@@ -31,7 +31,7 @@
 import qualified Simulation.Aivika.Vector as V
 
 -- | An implementation of the 'FCFS' queue strategy.
-instance (MonadComp m, MonadIO m, MonadTemplate m)
+instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m)
          => QueueStrategy m FCFS where
 
   {-# SPECIALISE instance QueueStrategy IO FCFS #-}
diff --git a/Simulation/Aivika/IO/Ref/Base.hs b/Simulation/Aivika/IO/Ref/Base.hs
--- a/Simulation/Aivika/IO/Ref/Base.hs
+++ b/Simulation/Aivika/IO/Ref/Base.hs
@@ -23,7 +23,7 @@
 import Simulation.Aivika.Trans.Template
 
 -- | The 'MonadIO' based monad is an instance of 'MonadRef'.
-instance (MonadIO m, MonadTemplate m) => MonadRef m where
+instance (Monad m, MonadIO m, MonadTemplate m) => MonadRef m where
 
   {-# SPECIALISE instance MonadRef IO #-}
 
diff --git a/Simulation/Aivika/IO/Resource/Preemption.hs b/Simulation/Aivika/IO/Resource/Preemption.hs
--- a/Simulation/Aivika/IO/Resource/Preemption.hs
+++ b/Simulation/Aivika/IO/Resource/Preemption.hs
@@ -39,7 +39,7 @@
 import qualified Simulation.Aivika.PriorityQueue as PQ
 
 -- | The 'MonadIO' based monad is an instance of 'MonadResource'.
-instance (MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where
+instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where
 
   {-# SPECIALISE instance MonadResource IO #-}
 
diff --git a/Simulation/Aivika/IO/Resource/Preemption/Base.hs b/Simulation/Aivika/IO/Resource/Preemption/Base.hs
--- a/Simulation/Aivika/IO/Resource/Preemption/Base.hs
+++ b/Simulation/Aivika/IO/Resource/Preemption/Base.hs
@@ -36,7 +36,7 @@
 import qualified Simulation.Aivika.PriorityQueue as PQ
 
 -- | The 'MonadIO' based monad is an instance of 'MonadResource'.
-instance (MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where
+instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadResource m where
 
   {-# SPECIALISE instance MonadResource IO #-}
 
diff --git a/Simulation/Aivika/IO/SD.hs b/Simulation/Aivika/IO/SD.hs
--- a/Simulation/Aivika/IO/SD.hs
+++ b/Simulation/Aivika/IO/SD.hs
@@ -25,6 +25,6 @@
 import Simulation.Aivika.Trans.Template
 
 -- | A template-based instantiation of the 'MonadSD' type class.
-instance (MonadComp m, MonadIO m, MonadTemplate m) => MonadSD m where
+instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m) => MonadSD m where
   
   {-# SPECIALISE instance MonadSD IO #-}
diff --git a/Simulation/Aivika/IO/Var.hs b/Simulation/Aivika/IO/Var.hs
--- a/Simulation/Aivika/IO/Var.hs
+++ b/Simulation/Aivika/IO/Var.hs
@@ -33,7 +33,7 @@
 import qualified Simulation.Aivika.Vector.Unboxed as UV
 
 -- | The 'MonadIO' based monad is an instance of 'MonadVar'.
-instance (MonadDES m, MonadIO m, MonadTemplate m) => MonadVar m where
+instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m) => MonadVar m where
 
   {-# SPECIALISE instance MonadVar IO #-}
 
diff --git a/Simulation/Aivika/IO/Var/Unboxed.hs b/Simulation/Aivika/IO/Var/Unboxed.hs
--- a/Simulation/Aivika/IO/Var/Unboxed.hs
+++ b/Simulation/Aivika/IO/Var/Unboxed.hs
@@ -33,7 +33,7 @@
 import qualified Simulation.Aivika.Vector.Unboxed as UV
 
 -- | The 'MonadIO' based monad is an instance of 'MonadVar'.
-instance (MonadDES m, MonadIO m, MonadTemplate m, Unboxed a) => MonadVar m a where
+instance (Monad m, MonadDES m, MonadIO m, MonadTemplate m, Unboxed a) => MonadVar m a where
 
   {-# SPECIALISE instance MonadVar IO Double #-}
   {-# SPECIALISE instance MonadVar IO Float #-}
diff --git a/Simulation/Aivika/Trans/Results.hs b/Simulation/Aivika/Trans/Results.hs
--- a/Simulation/Aivika/Trans/Results.hs
+++ b/Simulation/Aivika/Trans/Results.hs
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE CPP, FlexibleContexts, FlexibleInstances, UndecidableInstances, ExistentialQuantification, MultiParamTypeClasses, FunctionalDependencies #-}
+{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances, ExistentialQuantification, MultiParamTypeClasses, FunctionalDependencies #-}
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Results
@@ -28,9 +28,7 @@
         ResultComputing(..),
         ResultListWithSubscript(..),
         ResultArrayWithSubscript(..),
-#ifndef __HASTE__
         ResultVectorWithSubscript(..),
-#endif
         -- * Definitions Focused on Using the Library
         ResultValue(..),
         resultsToIntValues,
@@ -106,10 +104,7 @@
 
 import qualified Data.Map as M
 import qualified Data.Array as A
-
-#ifndef __HASTE__
 import qualified Data.Vector as V
-#endif
 
 import Data.Ix
 import Data.Maybe
@@ -1971,16 +1966,12 @@
       items = A.elems m
       subscript = map (\i -> "[" ++ show i ++ "]") (A.indices m)
 
-#ifndef __HASTE__
-
 instance ResultProvider p m => ResultProvider (V.Vector p) m where
   
   resultSource' name i m =
     resultSource' name i $ ResultVectorWithSubscript m subscript where
       subscript = V.imap (\i x -> intSubscript i) m
 
-#endif
-
 -- | Represents a list with the specified subscript.
 data ResultListWithSubscript p =
   ResultListWithSubscript [p] [String]
@@ -1989,14 +1980,10 @@
 data ResultArrayWithSubscript i p =
   ResultArrayWithSubscript (A.Array i p) (A.Array i String)
 
-#ifndef __HASTE__
-
 -- | Represents a vector with the specified subscript.
 data ResultVectorWithSubscript p =
   ResultVectorWithSubscript (V.Vector p) (V.Vector String)
 
-#endif
-
 instance ResultProvider p m => ResultProvider (ResultListWithSubscript p) m where
 
   resultSource' name i (ResultListWithSubscript xs ys) =
@@ -2018,15 +2005,13 @@
         let name' = name ++ y
         in resultSource' name' (VectorItemId y) x
       items' = map resultSourceSummary items
-    
+
 instance (Show i, Ix i, ResultProvider p m) => ResultProvider (ResultArrayWithSubscript i p) m where
 
   resultSource' name i (ResultArrayWithSubscript xs ys) =
     resultSource' name i $ ResultListWithSubscript items subscript where
       items = A.elems xs
       subscript = A.elems ys
-      
-#ifndef __HASTE__
 
 instance ResultProvider p m => ResultProvider (ResultVectorWithSubscript p) m where
 
@@ -2052,8 +2037,6 @@
         in resultSource' name' (VectorItemId y) x
       items' = V.map resultSourceSummary items
 
-#endif
-
 instance (Ix i, Show i, ResultComputing t m) => ResultProvider (t m (A.Array i Double)) m where
 
   resultSource' name i m =
@@ -2064,8 +2047,6 @@
   resultSource' name i m =
     ResultItemSource $ ResultItem $ mapResultValue A.elems $ computeResultValue name i m
 
-#ifndef __HASTE__
-
 instance ResultComputing t m => ResultProvider (t m (V.Vector Double)) m where
 
   resultSource' name i m =
@@ -2075,8 +2056,6 @@
 
   resultSource' name i m =
     ResultItemSource $ ResultItem $ mapResultValue V.toList $ computeResultValue name i m
-
-#endif
 
 instance (MonadDES m,
           Show si, Show sm, Show so,
diff --git a/Simulation/Aivika/Trans/Var.hs b/Simulation/Aivika/Trans/Var.hs
--- a/Simulation/Aivika/Trans/Var.hs
+++ b/Simulation/Aivika/Trans/Var.hs
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeFamilies, ConstrainedClassMethods #-}
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Var
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:         4.3.4
+version:         4.3.5
 synopsis:        Transformers for the Aivika simulation library
 description:
     This package is a generalization of the Aivika [1] simulation library
@@ -16,7 +16,7 @@
 homepage:        http://www.aivikasoft.com/en/products/aivika.html
 cabal-version:   >= 1.10
 build-type:      Simple
-tested-with:     GHC == 7.10.1
+tested-with:     GHC == 8.0.1
 
 extra-source-files:  examples/BassDiffusion.hs
                      examples/BouncingBall.hs
@@ -144,7 +144,7 @@
                      containers >= 0.4.0.0,
                      random >= 1.0.0.3,
                      vector >= 0.10.0.1,
-                     aivika >= 4.3.4
+                     aivika >= 4.3.5
 
     other-extensions:   FlexibleContexts,
                         FlexibleInstances,
@@ -159,7 +159,7 @@
                         TypeSynonymInstances,
                         DeriveDataTypeable,
                         RankNTypes,
-                        CPP
+                        ConstrainedClassMethods
                      
     ghc-options:     -O2
 
