diff --git a/adaptive-tuple.cabal b/adaptive-tuple.cabal
--- a/adaptive-tuple.cabal
+++ b/adaptive-tuple.cabal
@@ -1,5 +1,5 @@
 name:		adaptive-tuple
-version:        0.1.0
+version:        0.1.1
 synopsis:       Self-optimizing tuple types
 description:
   Self optimizing tuple types.
@@ -41,8 +41,7 @@
      base < 3
 
  build-depends:
-   haskell98
-   ,type-level >= 0.2 && < 0.3
+   type-level >= 0.2 && < 0.3
    ,template-haskell >= 2.0 && < 3
 
  exposed-modules:
@@ -57,3 +56,6 @@
  if impl(ghc >= 6.8)
    ghc-options: -fwarn-tabs
 
+source-repository head
+  type:     darcs
+  location: http://tanimoto.us/~jwlato/haskell/AdaptiveTuple
diff --git a/src/Data/AdaptiveTuple.hs b/src/Data/AdaptiveTuple.hs
--- a/src/Data/AdaptiveTuple.hs
+++ b/src/Data/AdaptiveTuple.hs
@@ -50,7 +50,7 @@
 
 where
 
-import Prelude -- hiding (take, drop, splitAt, foldl)
+import Prelude
 import qualified Prelude as P
 
 import Data.AdaptiveTuple.AdaptiveTuple
@@ -61,6 +61,7 @@
 
 import Control.Arrow
 import Control.Applicative
+import Control.Monad
 
 -- helper function
 fI :: (Integral a, Num b) => a -> b
@@ -142,11 +143,12 @@
   _ <*> _ = ATuple0
 
 instance AdaptiveTuple ATuple0 D0 where
-  getIndex _ n   = oObExcp "getIndex"
+  getIndex _ _   = oObExcp "getIndex"
   setIndex _ _ _ = ATuple0
   mapIndex _ _ _ = ATuple0
   toATuple _     = ATuple0
   fromATuple _   = []
+  sequenceAT _   = return ATuple0
 
 
 -- |A ListTuple is a List with a type-level length.
@@ -176,4 +178,4 @@
                         P.splitAt (fI i) . getListTuple
   toATuple      = makeListTuple (undefined :: s)
   fromATuple    = getListTuple
-
+  sequenceAT    = liftM ListTuple . sequence . getListTuple
diff --git a/src/Data/AdaptiveTuple/AdaptiveTuple.hs b/src/Data/AdaptiveTuple/AdaptiveTuple.hs
--- a/src/Data/AdaptiveTuple/AdaptiveTuple.hs
+++ b/src/Data/AdaptiveTuple/AdaptiveTuple.hs
@@ -27,6 +27,7 @@
   fromATuple :: c s el -> [el]
   tupLength  :: c s el -> Int
   tupLength _ = toInt (undefined :: s)
+  sequenceAT :: (Monad m) => c s (m el) -> m (c s el)
 
 -- -------------------------------------
 -- exceptions
diff --git a/src/Data/AdaptiveTuple/TH.hs b/src/Data/AdaptiveTuple/TH.hs
--- a/src/Data/AdaptiveTuple/TH.hs
+++ b/src/Data/AdaptiveTuple/TH.hs
@@ -91,7 +91,7 @@
   TyConI (DataD _ _ _ constructors _) <- reify t
   tT <- conT t
   sT <- conT s
-  d <- [d| instance (T.Nat s, Applicative (T1 s)) => AdaptiveTuple T1 s where getIndex _ _ = undefined; setIndex _ _ c = c; mapIndex _ _ c = c; toATuple _ = undefined; fromATuple _ = []|]
+  d <- [d| instance (T.Nat s, Applicative (T1 s)) => AdaptiveTuple T1 s where getIndex _ _ = undefined; setIndex _ _ c = c; mapIndex _ _ c = c; toATuple _ = undefined; fromATuple _ = []; sequenceAT _ = undefined|]
   let makeClauseOut n pf bf = return $ map ((\(x,y) -> clause x y []) .
                                 (pf &&& bf)) [0..n]
   let getClauses (NormalC name fields) = do
@@ -128,14 +128,21 @@
   let fromClause (NormalC name fields) = do
         (aP, aV) <- genPE (length fields)
         clause [conP name aP] (normalB $ listE aV) []
-  let [InstanceD _ (AppT (AppT adtT _) _) [FunD getF _, FunD setF _, FunD mapF _, FunD toATF _, FunD fromATF _]] = d
+  let seqClause (NormalC name fields) = do
+        (aP, aV) <- genPE (length fields)
+        let step vals acc = case vals of
+              (mx:xs) -> [| $mx >>= \x -> $(step xs (appE acc [|x|])) |]
+              _      -> [|return $acc|]
+        clause [conP name aP] (normalB (step aV (conE name))) []
+  let [InstanceD _ (AppT (AppT adtT _) _) [FunD getF _, FunD setF _, FunD mapF _, FunD toATF _, FunD fromATF _, FunD seqATF _]] = d
   let newty = AppT (AppT adtT tT) sT
   getters <- mapM getClauses constructors >>= (funD getF . concat)
   setters <- mapM setClauses constructors >>= (funD setF . concat)
   maps    <- mapM mapClauses constructors >>= (funD mapF . concat)
   tos     <- mapM toClauses  constructors >>= (funD toATF . concat)
   froms   <- funD fromATF (map fromClause constructors)
-  return [InstanceD [] newty [getters,setters,maps,tos,froms]]
+  seqAT   <- funD seqATF  (map seqClause constructors)
+  return [InstanceD [] newty [getters,setters,maps,tos,froms,seqAT]]
 
 -- |Create a list of n Names, with the associated Pat's and Exp's
 genPE :: Int -> Q ([PatQ], [ExpQ])
