diff --git a/.ghci b/.ghci
new file mode 100644
--- /dev/null
+++ b/.ghci
@@ -0,0 +1,1 @@
+:set -isrc -idist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h
diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+dist
+docs
+wiki
+TAGS
+tags
+wip
+.DS_Store
+.*.swp
+.*.swo
+*.o
+*.hi
+*~
+*#
diff --git a/.vim.custom b/.vim.custom
new file mode 100644
--- /dev/null
+++ b/.vim.custom
@@ -0,0 +1,31 @@
+" Add the following to your .vimrc to automatically load this on startup
+
+" if filereadable(".vim.custom")
+"     so .vim.custom
+" endif
+
+function StripTrailingWhitespace()
+  let myline=line(".")
+  let mycolumn = col(".")
+  silent %s/  *$//
+  call cursor(myline, mycolumn)
+endfunction
+
+" enable syntax highlighting
+syntax on
+
+" search for the tags file anywhere between here and /
+set tags=TAGS;/
+
+" highlight tabs and trailing spaces
+set listchars=tab:‗‗,trail:‗
+set list
+
+" f2 runs hasktags
+map <F2> :exec ":!hasktags -x -c --ignore src"<CR><CR>
+
+" strip trailing whitespace before saving
+" au BufWritePre *.hs,*.markdown silent! cal StripTrailingWhitespace()
+
+" rebuild hasktags after saving
+au BufWritePost *.hs silent! :exec ":!hasktags -x -c --ignore src"
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.markdown
@@ -0,0 +1,17 @@
+4.0
+---
+* This package has been merged into `comonad` 4.0
+
+3.0.3
+-----
+* Properly annotate the package with upper bounds on its dependencies
+
+3.0.2
+-----
+* Marked modules appropriately `Trustworthy` as needed.
+
+3.0.1
+-----
+* Removed upper bounds on dependencies on my other packages
+* Added IRC build-bot notification
+* Automatic tags file support
diff --git a/README.markdown b/README.markdown
new file mode 100644
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,17 @@
+comonads-fd
+===========
+
+[![Build Status](https://secure.travis-ci.org/ekmett/comonads-fd.png?branch=master)](http://travis-ci.org/ekmett/comonads-fd)
+
+This package provides classes for accessing a standard set of comonad transformers for Haskell.
+
+The actual comonads in question are provided by the [`comonad-transformers`](/ekmett/comonad-transformers) package.
+
+Contact Information
+-------------------
+
+Contributions and bug reports are welcome!
+
+Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.
+
+-Edward Kmett
diff --git a/comonads-fd.cabal b/comonads-fd.cabal
--- a/comonads-fd.cabal
+++ b/comonads-fd.cabal
@@ -1,6 +1,6 @@
 name:          comonads-fd
 category:      Control, Comonads
-version:       3.0.3
+version:       4.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -10,39 +10,20 @@
 homepage:      http://github.com/ekmett/comonads-fd/
 bug-reports:   http://github.com/ekmett/comonads-fd/issues
 copyright:     Copyright (C) 2008-2013 Edward A. Kmett
-synopsis:      Comonad transformers using functional dependencies
-description:   Comonad transformers using functional dependencies
+synopsis:      This package has been merged into comonad 4.0
+description:   This package has been merged into comonad 4.0
 build-type:    Simple
-extra-source-files: .travis.yml
+extra-source-files:
+  .ghci
+  .gitignore
+  .travis.yml
+  .vim.custom
+  CHANGELOG.markdown
+  README.markdown
 
 source-repository head
   type: git
   location: git://github.com/ekmett/comonads-fd.git
 
 library
-  other-extensions:
-    MultiParamTypeClasses
-    FunctionalDependencies
-    FlexibleInstances
-    UndecidableInstances
-
-  build-depends:
-    base                 >= 4       && < 5,
-    transformers         >= 0.2     && < 0.4,
-    mtl                  >= 2.0     && < 2.2,
-    semigroups           >= 0.8.3.1 && < 1,
-    comonad              >= 3       && < 4,
-    comonad-transformers >= 3       && < 4
-
-  exposed-modules:
-    Control.Comonad.Env
-    Control.Comonad.Env.Class
-    Control.Comonad.Identity
-    Control.Comonad.Store
-    Control.Comonad.Store.Class
-    Control.Comonad.Traced
-    Control.Comonad.Traced.Class
-
-  ghc-options: -Wall
-  hs-source-dirs: src
-
+  build-depends: base >= 4 && < 5, comonad >= 4
diff --git a/src/Control/Comonad/Env.hs b/src/Control/Comonad/Env.hs
deleted file mode 100644
--- a/src/Control/Comonad/Env.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Env
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
---
--- The Env comonad (aka the Coreader, Environment, or Product comonad)
---
--- A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow
--- in the reader monad.
---
--- (a -> e -> m) ~ (a, e) -> m ~ Env e a -> m
-----------------------------------------------------------------------------
-module Control.Comonad.Env (
-  -- * ComonadEnv class
-    ComonadEnv(..)
-  , asks
-  , local
-  -- * The Env comonad
-  , Env
-  , env
-  , runEnv
-  -- * The EnvT comonad transformer
-  , EnvT(..)
-  , runEnvT
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Env.Class (ComonadEnv(..), asks)
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env (Env, env, runEnv, EnvT(..), runEnvT, local)
diff --git a/src/Control/Comonad/Env/Class.hs b/src/Control/Comonad/Env/Class.hs
deleted file mode 100644
--- a/src/Control/Comonad/Env/Class.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Env.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Env.Class
-  ( ComonadEnv(..)
-  , asks
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import qualified Control.Comonad.Trans.Env as Env
-import Control.Comonad.Trans.Store
-import Control.Comonad.Trans.Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadEnv e w | w -> e where
-  ask :: w a -> e
-
-asks :: ComonadEnv e w => (e -> e') -> w a -> e'
-asks f wa = f (ask wa)
-{-# INLINE asks #-}
-
-instance Comonad w => ComonadEnv e (Env.EnvT e w) where
-  ask = Env.ask
-
-instance ComonadEnv e ((,)e) where
-  ask = fst
-
-lowerAsk :: (ComonadEnv e w, ComonadTrans t) => t w a -> e
-lowerAsk = ask . lower
-{-# INLINE lowerAsk #-}
-
-instance ComonadEnv e w => ComonadEnv e (StoreT t w) where
-  ask = lowerAsk
-
-instance ComonadEnv e w => ComonadEnv e (IdentityT w) where
-  ask = lowerAsk
-
-instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) where
-  ask = lowerAsk
diff --git a/src/Control/Comonad/Identity.hs b/src/Control/Comonad/Identity.hs
deleted file mode 100644
--- a/src/Control/Comonad/Identity.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Identity
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Identity (
-    module Control.Comonad
-  , module Data.Functor.Identity
-  , module Control.Comonad.Trans.Identity
-  ) where
-
-import Control.Comonad
-import Data.Functor.Identity
-import Control.Comonad.Trans.Identity
diff --git a/src/Control/Comonad/Store.hs b/src/Control/Comonad/Store.hs
deleted file mode 100644
--- a/src/Control/Comonad/Store.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Store
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Store (
-  -- * ComonadStore class
-    ComonadStore(..)
-  -- * The Store comonad
-  , Store
-  , store
-  , runStore
-  -- * The StoreT comonad transformer
-  , StoreT(..)
-  , runStoreT
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Store.Class (ComonadStore(..))
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Store (Store, store, runStore, StoreT(..), runStoreT)
diff --git a/src/Control/Comonad/Store/Class.hs b/src/Control/Comonad/Store/Class.hs
deleted file mode 100644
--- a/src/Control/Comonad/Store/Class.hs
+++ /dev/null
@@ -1,82 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Store.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Store.Class
-  ( ComonadStore(..)
-  , lowerPos
-  , lowerPeek
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env
-import qualified Control.Comonad.Trans.Store as Store
-import Control.Comonad.Trans.Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadStore s w | w -> s where
-  pos :: w a -> s
-  peek :: s -> w a -> a
-
-  peeks :: (s -> s) -> w a -> a
-  peeks f w = peek (f (pos w)) w
-
-  seek :: s -> w a -> w a
-  seek s = peek s . duplicate
-
-  seeks :: (s -> s) -> w a -> w a
-  seeks f = peeks f . duplicate
-
-  experiment :: Functor f => (s -> f s) -> w a -> f a
-  experiment f w = fmap (`peek` w) (f (pos w))
-
-instance Comonad w => ComonadStore s (Store.StoreT s w) where
-  pos = Store.pos
-  peek = Store.peek
-  peeks = Store.peeks
-  seek = Store.seek
-  seeks = Store.seeks
-  experiment = Store.experiment
-
-lowerPos :: (ComonadTrans t, ComonadStore s w) => t w a -> s
-lowerPos = pos . lower
-{-# INLINE lowerPos #-}
-
-lowerPeek :: (ComonadTrans t, ComonadStore s w) => s -> t w a -> a
-lowerPeek s = peek s . lower
-{-# INLINE lowerPeek #-}
-
-lowerExperiment :: (ComonadTrans t, ComonadStore s w, Functor f) => (s -> f s) -> t w a -> f a
-lowerExperiment f = experiment f . lower
-{-# INLINE lowerExperiment #-}
-
-instance ComonadStore s w => ComonadStore s (IdentityT w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
-
-instance ComonadStore s w => ComonadStore s (EnvT e w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
-
-instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where
-  pos = lowerPos
-  peek = lowerPeek
-  experiment = lowerExperiment
diff --git a/src/Control/Comonad/Traced.hs b/src/Control/Comonad/Traced.hs
deleted file mode 100644
--- a/src/Control/Comonad/Traced.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Traced
--- Copyright   :  (C) 2008-2011 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Traced (
-  -- * ComonadTraced class
-    ComonadTraced(..)
-  , traces
-  -- * The Traced comonad
-  , Traced
-  , traced
-  , runTraced
-  -- * The TracedT comonad transformer
-  , TracedT(..)
-  -- * Re-exported modules
-  , module Control.Comonad
-  , module Control.Comonad.Trans.Class
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Traced.Class (ComonadTraced(..), traces)
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Traced (Traced, traced, runTraced, TracedT(..), runTracedT)
diff --git a/src/Control/Comonad/Traced/Class.hs b/src/Control/Comonad/Traced/Class.hs
deleted file mode 100644
--- a/src/Control/Comonad/Traced/Class.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE CPP #-}
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE Trustworthy #-}
-#endif
------------------------------------------------------------------------------
--- |
--- Module      :  Control.Comonad.Traced.Class
--- Copyright   :  (C) 2008-2012 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekmett@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable (fundeps, MPTCs)
-----------------------------------------------------------------------------
-module Control.Comonad.Traced.Class
-  ( ComonadTraced(..)
-  , traces
-  ) where
-
-import Control.Comonad
-import Control.Comonad.Trans.Class
-import Control.Comonad.Trans.Env
-import Control.Comonad.Trans.Store
-import qualified Control.Comonad.Trans.Traced as Traced
-import Control.Comonad.Trans.Identity
-import Data.Semigroup
-
-class Comonad w => ComonadTraced m w | w -> m where
-  trace :: m -> w a -> a
-
-traces :: ComonadTraced m w => (a -> m) -> w a -> a
-traces f wa = trace (f (extract wa)) wa
-{-# INLINE traces #-}
-
-instance (Comonad w, Monoid m) => ComonadTraced m (Traced.TracedT m w) where
-  trace = Traced.trace
-
-lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a
-lowerTrace m = trace m . lower
-{-# INLINE lowerTrace #-}
-
--- All of these require UndecidableInstances because they do not satisfy the coverage condition
-
-instance ComonadTraced m w => ComonadTraced m (IdentityT w) where
-  trace = lowerTrace
-
-instance ComonadTraced m w => ComonadTraced m (EnvT e w) where
-  trace = lowerTrace
-
-instance ComonadTraced m w => ComonadTraced m (StoreT s w) where
-  trace = lowerTrace
