diff -ruN syb-with-class-0.5.1/Data/Generics/SYB/WithClass/Derive.hs syb-with-class-0.6.1/Data/Generics/SYB/WithClass/Derive.hs
--- syb-with-class-0.5.1/Data/Generics/SYB/WithClass/Derive.hs	2009-02-01 17:58:21.000000000 -0800
+++ syb-with-class-0.6.1/Data/Generics/SYB/WithClass/Derive.hs	2009-12-15 01:51:24.000000000 -0800
@@ -23,7 +23,6 @@
 import Language.Haskell.TH
 import Data.List
 import Control.Monad
-import Data.Maybe
 import Data.Generics.SYB.WithClass.Basics
 
 --
@@ -181,10 +180,11 @@
 
        myType = foldl AppT (ConT name) typeParams
        dataCxt typ = conT ''Data `appT` varT (mkName "ctx") `appT` return typ
-       satCxt typ = conT ''Sat `appT` (varT (mkName "ctx") `appT` return typ)
+       dataCxt' typ = return $ ClassP ''Data [VarT (mkName "ctx"), typ]
+       satCxt typ = return $ ClassP ''Sat [VarT (mkName "ctx") `AppT` typ]
        dataCxtTypes = nub (typeParams ++ types)
        satCxtTypes = nub (myType : types)
-       context = cxt (map dataCxt dataCxtTypes ++ map satCxt satCxtTypes)
+       context = cxt (map dataCxt' dataCxtTypes ++ map satCxt satCxtTypes)
 #endif
 
 deriveMinimalData :: Name -> Int  -> Q [Dec]
@@ -195,7 +195,7 @@
     decs <- qOfDecs
     params <- replicateM nParam (newName "a")
     let typeQParams = map varT params
-        context = cxt (map (\typ -> conT ''Data `appT` typ) typeQParams)
+        context = cxt (map (\typ -> classP ''Data [typ]) typeQParams)
         instanceType = foldl appT (conT name) typeQParams
     inst <-instanceD context
                      (conT ''Data `appT` instanceType)
@@ -224,8 +224,8 @@
                [Constructor])   -- The constructors
 typeInfo d
  = case d of
-   DataD    _ n ps cs _ -> return (n, ps, map conA cs)
-   NewtypeD _ n ps c  _ -> return (n, ps, [conA c])
+   DataD    _ n ps cs _ -> return (n, map varName ps, map conA cs)
+   NewtypeD _ n ps c  _ -> return (n, map varName ps, [conA c])
    _ -> error ("derive: not a data type declaration: " ++ show d)
  where conA (NormalC c xs)   = (c, length xs, Nothing, map snd xs)
        conA (InfixC x1 c x2) = conA (NormalC c [x1, x2])
@@ -235,6 +235,8 @@
                                    fields = map getField xs
                                    types  = map getType xs
                                in (c, length xs, Just fields, types)
+       varName (PlainTV n) = n
+       varName (KindedTV n _) = n
 
 --
 -- | Derives the Data and Typeable instances for a single given data type.
diff -ruN syb-with-class-0.5.1/Data/Generics/SYB/WithClass/Instances.hs syb-with-class-0.6.1/Data/Generics/SYB/WithClass/Instances.hs
--- syb-with-class-0.5.1/Data/Generics/SYB/WithClass/Instances.hs	2009-02-01 17:58:21.000000000 -0800
+++ syb-with-class-0.6.1/Data/Generics/SYB/WithClass/Instances.hs	2009-12-15 01:51:24.000000000 -0800
@@ -11,18 +11,20 @@
 
 import Data.Array
 import Data.ByteString.Char8 (ByteString)
-import Data.Typeable
+import qualified Data.ByteString.Lazy as L (ByteString)
 import Data.Int              -- So we can give Data instance for Int8, ...
 import Data.Word             -- So we can give Data instance for Word8, ...
 import GHC.Real( Ratio(..) ) -- So we can give Data instance for Ratio
-import GHC.IOBase            -- So we can give Data instance for IO, Handle
+import System.IO             -- So we can give Data instance for IO, Handle
 import GHC.Ptr               -- So we can give Data instance for Ptr
 import GHC.ForeignPtr        -- So we can give Data instance for ForeignPtr
 import GHC.Stable            -- So we can give Data instance for StablePtr
 import GHC.ST                -- So we can give Data instance for ST
-import GHC.Conc              -- So we can give Data instance for MVar & Co.
+import Data.IORef            -- So we can give Data instance for IORef
+import Control.Concurrent.MVar   -- So we can give Data instance for MVar & Co.
 import qualified Data.Map as M
 import qualified Data.Set as S
+
 ------------------------------------------------------------------------------
 --
 -- Instances of the Data class for Prelude-like types.
@@ -722,4 +724,4 @@
 ------------------------------------------------------------------------------
 
 $( deriveData [''ByteString] )
-
+$( deriveData [''L.ByteString] )
diff -ruN syb-with-class-0.5.1/syb-with-class.cabal syb-with-class-0.6.1/syb-with-class.cabal
--- syb-with-class-0.5.1/syb-with-class.cabal	2009-02-01 17:58:21.000000000 -0800
+++ syb-with-class-0.6.1/syb-with-class.cabal	2009-12-15 01:51:24.000000000 -0800
@@ -1,5 +1,5 @@
 Name:               syb-with-class
-Version:            0.5.1
+Version:            0.6.1
 License:            BSD3
 License-file:       LICENSE
 Copyright:          2004 - 2008 The University of Glasgow, CWI,
@@ -16,16 +16,16 @@
     Classes, and Template Haskell code to generate instances, for the
     Scrap Your Boilerplate With Class system.    
 Category:           Data
-Tested-With:        GHC==6.8.3, GHC==6.10.1
+Tested-With:        GHC==6.12.1
 Build-Type:         Simple
 Cabal-Version:      >= 1.6
 
 source-repository head
   type:     darcs
-  location: http://patch-tag.com/publicrepos/syb-with-class
+  location: http://patch-tag.com/r/Saizan/syb-with-class/pullrepo
 
 Library 
-    Build-Depends:      base >= 3 && < 5, template-haskell, bytestring, array, containers
+    Build-Depends:      base >= 3 && < 5, template-haskell >= 2.4 && < 2.5, bytestring, array, containers
     Exposed-modules:
         Data.Generics.SYB.WithClass.Basics
         Data.Generics.SYB.WithClass.Context

