diff --git a/Control/Comonad.hs b/Control/Comonad.hs
--- a/Control/Comonad.hs
+++ b/Control/Comonad.hs
@@ -34,6 +34,7 @@
 import Control.Monad.Trans.Identity
 import Data.Functor.Identity
 import Data.Functor.Extend
+import Data.List.NonEmpty
 import Data.Monoid
 import Data.Typeable
 import Data.Semigroup
@@ -131,6 +132,10 @@
 instance Monad (Cokleisli w a) where
   return = Cokleisli . const
   Cokleisli k >>= f = Cokleisli $ \w -> runCokleisli (f (k w)) w
+
+instance Comonad NonEmpty where
+  extract ~(a :| _) = a
+
 
 {- $definition
 
diff --git a/Data/Functor/Extend.hs b/Data/Functor/Extend.hs
--- a/Data/Functor/Extend.hs
+++ b/Data/Functor/Extend.hs
@@ -24,6 +24,7 @@
 import Data.Functor.Identity
 import Data.Semigroup
 import Data.List (tails)
+import Data.List.NonEmpty (NonEmpty(..), toList)
 import Data.Sequence (Seq) 
 import qualified Data.Sequence as Seq
 import Data.Tree
@@ -113,6 +114,11 @@
 -- If Extend moved to base, consider moving instance into transformers?
 instance Extend w => Extend (IdentityT w) where
   extend f (IdentityT m) = IdentityT (extend (f . IdentityT) m)
+
+instance Extend NonEmpty where
+  extend f w@ ~(_ :| aas) = f w :| case aas of
+      []     -> []
+      (a:as) -> toList (extend f (a :| as))
 
 {- $definition
 
diff --git a/comonad.cabal b/comonad.cabal
--- a/comonad.cabal
+++ b/comonad.cabal
@@ -1,6 +1,6 @@
 name:          comonad
 category:      Control, Comonads
-version:       1.0.3
+version:       1.1.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -22,7 +22,7 @@
     base >= 4 && < 4.4,
     transformers >= 0.2.0 && < 0.3,
     containers >= 0.3.0.0 && < 0.5,
-    semigroups >= 0.4 && < 0.5
+    semigroups >= 0.5 && < 0.6
 
   exposed-modules:
     Control.Comonad
