--- syb-0.4.3-orig/tests/XML.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/XML.hs	2015-01-02 12:47:10.082782760 +1100
@@ -13,6 +13,7 @@
 
 import Test.HUnit
 
+import Control.Applicative (Alternative(..), Applicative(..))
 import Control.Monad
 import Data.Maybe
 import Data.Generics
@@ -157,6 +158,17 @@
                         else Just (tail x, head x)
                )
 
+instance Functor ReadX where
+  fmap  = liftM
+
+instance Applicative ReadX where
+  pure  = return
+  (<*>) = ap
+
+instance Alternative ReadX where
+  (<|>) = mplus
+  empty = mzero
+
 -- ReadX is a monad!
 instance Monad ReadX where
   return x = ReadX (\y -> Just (y,x))
--- syb-0.4.3-orig/tests/Perm.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/Perm.hs	2015-01-02 12:47:02.751422866 +1100
@@ -11,6 +11,7 @@
 
 import Test.HUnit
 
+import Control.Applicative (Alternative(..), Applicative(..))
 import Control.Monad
 import Data.Generics
 
@@ -44,6 +45,17 @@
                         else Just (tail x, head x)
                )
 
+instance Functor ReadT where
+  fmap  = liftM
+
+instance Applicative ReadT where
+  pure  = return
+  (<*>) = ap
+
+instance Alternative ReadT where
+  (<|>) = mplus
+  empty = mzero
+
 -- ReadT is a monad!
 instance Monad ReadT where
   return x = ReadT (\y -> Just (y,x))
--- syb-0.4.3-orig/tests/Bits.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/Bits.hs	2015-01-02 12:46:37.842839944 +1100
@@ -39,6 +39,7 @@
 import Data.Generics
 import Data.Char
 import Data.Maybe
+import Control.Applicative (Alternative(..), Applicative(..))
 import Control.Monad
 import CompanyDatatypes
 
@@ -129,6 +130,16 @@
 data ReadB a = ReadB (Bin -> (Maybe a, Bin))
 unReadB (ReadB f) = f
 
+instance Functor ReadB where
+  fmap  = liftM
+
+instance Applicative ReadB where
+  pure  = return
+  (<*>) = ap
+
+instance Alternative ReadB where
+  (<|>) = mplus
+  empty = mzero
 
 -- It's a monad.
 instance Monad ReadB where
--- syb-0.4.3-orig/tests/Encode.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/Encode.hs	2015-01-02 12:51:48.500949407 +1100
@@ -6,6 +6,8 @@
 
 module Encode () where
 
+import Control.Applicative (Applicative(..))
+import Control.Monad (ap, liftM)
 import Data.Generics
 
 data Bit = Zero | One
@@ -62,6 +64,11 @@
 -- Sec. 3.3 cont'd
 
 data EncM a   -- The encoder monad
+instance Functor EncM where
+  fmap  = liftM
+instance Applicative EncM where
+  pure  = return
+  (<*>) = ap
 instance Monad EncM
  where
   return  = undefined
--- syb-0.4.3-orig/tests/GRead2.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/GRead2.hs	2015-01-02 12:51:27.524567019 +1100
@@ -10,6 +10,8 @@
 
 -}
 
+import Control.Applicative (Applicative(..))
+import Control.Monad (ap, liftM)
 import Data.Generics
 
 gread :: Data a => String -> Maybe a
@@ -18,6 +20,13 @@
 -- The decoder monad
 newtype DecM a = D (String -> Maybe (String, a))
 
+instance Functor DecM where
+    fmap  = liftM
+
+instance Applicative DecM where
+    pure  = return
+    (<*>) = ap
+
 instance Monad DecM where
     return a = D (\s -> Just (s,a))
     (D m) >>= k = D (\s ->
--- syb-0.4.3-orig/tests/Ext1.hs	2014-12-31 19:40:41.000000000 +1100
+++ syb-0.4.3/tests/Ext1.hs	2015-01-02 10:30:39.396517984 +1100
@@ -1,4 +1,5 @@
 {-# OPTIONS -fglasgow-exts #-}
+{-# LANGUAGE CPP #-}
 
 module Ext1 (tests) where
 
@@ -11,8 +12,11 @@
 import Test.HUnit
 
 import Data.Generics
+#if MIN_VERSION_base(4,8,0)
+import GHC.Base hiding(foldr)
+#else
 import GHC.Base
-
+#endif
 
 -- Unsafe coerce
 unsafeCoerce :: a -> b
