diff --git a/dunai-test.cabal b/dunai-test.cabal
--- a/dunai-test.cabal
+++ b/dunai-test.cabal
@@ -1,7 +1,7 @@
 name:                dunai-test
-version:             0.7.0
+version:             0.8.0
 synopsis:            Testing library for Dunai
-description:         Testing and debugging library for Duani.
+description:         Testing and debugging library for Dunai.
   .
   It contains:
   .
@@ -31,7 +31,7 @@
                        FRP.Dunai.Stream
                        FRP.Dunai.QuickCheck
   build-depends:       base >= 4 && <5,
-                       dunai >= 0.5 && <0.8,
+                       dunai >= 0.5 && <0.9,
                        QuickCheck,
                        normaldistribution
   hs-source-dirs:      src
diff --git a/src/FRP/Dunai/LTLFuture.hs b/src/FRP/Dunai/LTLFuture.hs
--- a/src/FRP/Dunai/LTLFuture.hs
+++ b/src/FRP/Dunai/LTLFuture.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                 #-}
 {-# LANGUAGE GADTs               #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 module FRP.Dunai.LTLFuture
@@ -7,6 +8,10 @@
     )
   where
 
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative (Applicative, (<$>), (<*>), pure)
+#endif
+
 import Control.Monad.Trans.MSF.Reader
 import Data.MonadicStreamFunction
 import Data.MonadicStreamFunction.InternalCore (unMSF)
@@ -27,7 +32,7 @@
   Until      :: TPred m a -> TPred m a -> TPred m a
 
 -- | Apply a transformation to the leaves of a temporal predicate (to the SFs).
-tPredMap :: Monad m
+tPredMap :: (Functor m, Applicative m, Monad m)
          => (MSF m a Bool -> m (MSF m a Bool))  -- ^ Transformation to apply
          -> TPred m a                           -- ^ Temporal predicate
          -> m (TPred m a)
@@ -46,7 +51,8 @@
 -- | Evaluates a temporal predicate at time T=0 against a sample stream.
 --
 -- Returns 'True' if the temporal proposition is currently true.
-evalT :: Monad m => TPred (ReaderT DTime m) a -> SignalSampleStream a -> m Bool
+evalT :: (Functor m, Applicative m, Monad m)
+      => TPred (ReaderT DTime m) a -> SignalSampleStream a -> m Bool
 evalT (Prop sf)       [] = return False
 evalT (And t1 t2)     [] = (&&) <$> evalT t1 [] <*> evalT t2 []
 evalT (Or  t1 t2)     [] = (||) <$> evalT t1 [] <*> evalT t2 []
@@ -93,7 +99,7 @@
 orM (SoFar x)     (SoFar True)  = SoFar x
 
 -- | Perform one step of evaluation of a temporal predicate.
-stepF :: Monad m
+stepF :: (Applicative m, Monad m)
       => TPred (ReaderT DTime m) a
       -> (DTime, a)
       -> m (MultiRes, TPred (ReaderT DTime m) a)
diff --git a/src/FRP/Dunai/LTLPast.hs b/src/FRP/Dunai/LTLPast.hs
--- a/src/FRP/Dunai/LTLPast.hs
+++ b/src/FRP/Dunai/LTLPast.hs
@@ -36,7 +36,7 @@
 everSF :: Monad m => MSF m Bool Bool
 everSF = feedback False $ arr $ \(n,o) -> let n' = o || n in (n', n')
 
-untilSF :: Monad m => MSF m (Bool, Bool) Bool
+untilSF :: (Functor m, Monad m) => MSF m (Bool, Bool) Bool
 untilSF =
     catchMaybe (untilMaybeB (feedback True $ arr cond))
                (snd ^>> sofarSF)
diff --git a/src/FRP/Dunai/QuickCheck.hs b/src/FRP/Dunai/QuickCheck.hs
--- a/src/FRP/Dunai/QuickCheck.hs
+++ b/src/FRP/Dunai/QuickCheck.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                 #-}
 {-# LANGUAGE MultiWayIf          #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 
@@ -12,6 +13,10 @@
 
 -- - The function uniDistStreamMaxDT had the wrong type and the name on the
 --   paper was: uniDistStream. This has been fixed.
+
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative ((<$>), pure)
+#endif
 
 import Data.Random.Normal
 import Data.MonadicStreamFunction
