diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,8 @@
+CHANGELOG
+=========
+
+- 0.1.1.0 (2017-05-13)
+    * Add `Data.Cofunctor.Cocoyoneda` module
+
+- 0.1.0.0 (2014-11-28)
+    * Initial release
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,17 @@
+acme-cofunctor
+==============
+
+A `Cofunctor` is a structure from category theory dual to `Functor`.
+
+We all know that a `Functor` is defined by the operation 'fmap':
+
+    fmap :: (a -> b) -> (f a -> f b)
+
+This means that its dual must be defined by the following operation:
+
+    cofmap :: (b -> a) -> (f b -> f a)
+
+Since beginning his investigations, the author of this package has discovered
+that this pattern is _at least_ as commonly used as `Functor`. In fact, many
+ubiquitous Haskell types (e.g. `[]`, `Maybe`, `((->) a)` turn out to have a
+`Cofunctor` instance.
diff --git a/acme-cofunctor.cabal b/acme-cofunctor.cabal
--- a/acme-cofunctor.cabal
+++ b/acme-cofunctor.cabal
@@ -1,5 +1,5 @@
 Name:          acme-cofunctor
-Version:       0.1.0.0
+Version:       0.1.1.0
 Synopsis:      A Cofunctor is a structure from category theory dual to Functor
 License:       BSD3
 License-file:  LICENSE
@@ -37,11 +37,18 @@
   ubiquitous Haskell types (e.g. @[]@, 'Maybe', @((->) a)@ turn out to have a
   'Cofunctor' instance.
 
+Extra-source-files:
+  README.md
+  CHANGELOG.md
+
 Library
-  Exposed-modules:  Data.Cofunctor
-  default-language: Haskell98
+  Default-language: Haskell98
   Ghc-options:      -Wall
   Hs-source-dirs:   src
+
+  Exposed-modules:
+    Data.Cofunctor,
+    Data.Cofunctor.Cocoyoneda
 
   Build-depends:
     base >= 4 && < 5
diff --git a/src/Data/Cofunctor/Cocoyoneda.hs b/src/Data/Cofunctor/Cocoyoneda.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Cofunctor/Cocoyoneda.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE RankNTypes #-}
+
+-- | 'Cocoyoneda' gives a cofree cofunctor for any type constructor.
+module Data.Cofunctor.Cocoyoneda
+    ( Cocoyoneda(..)
+    , liftCocoyoneda
+    , lowerCocoyoneda
+    , hoistCocoyoneda
+    ) where
+
+import Data.Cofunctor (Cofunctor(..))
+
+data Cocoyoneda f a where
+    Cocoyoneda :: (a -> b) -> f a -> Cocoyoneda f b
+
+instance Cofunctor (Cocoyoneda f) where
+    cofmap f (Cocoyoneda g x) = Cocoyoneda (f . g) x
+
+liftCocoyoneda :: f a -> Cocoyoneda f a
+liftCocoyoneda = Cocoyoneda id
+
+lowerCocoyoneda :: Cofunctor f => Cocoyoneda f a -> f a
+lowerCocoyoneda (Cocoyoneda f x) = cofmap f x
+
+hoistCocoyoneda :: (forall a. f a -> g a) -> Cocoyoneda f b -> Cocoyoneda g b
+hoistCocoyoneda f (Cocoyoneda g x) = Cocoyoneda g (f x)
