diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+3.10.0.1 [maintenance release]
+--------
+* Compatibility with `text` 1.0
+
 3.10
 ----
 * Switched to `bifunctors`, `comonad`, `profunctors`, and `semigroupoids` 4.0.
diff --git a/lens.cabal b/lens.cabal
--- a/lens.cabal
+++ b/lens.cabal
@@ -1,6 +1,6 @@
 name:          lens
 category:      Data, Lenses
-version:       3.10
+version:       3.10.0.1
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -186,7 +186,7 @@
     split                     >= 0.2      && < 0.3,
     tagged                    >= 0.4.4    && < 1,
     template-haskell          >= 2.4      && < 2.10,
-    text                      >= 0.11     && < 0.12,
+    text                      >= 0.11     && < 1.2,
     transformers              >= 0.2      && < 0.4,
     transformers-compat       >= 0.1      && < 1,
     unordered-containers      >= 0.2      && < 0.3,
diff --git a/src/Control/Exception/Lens.hs b/src/Control/Exception/Lens.hs
--- a/src/Control/Exception/Lens.hs
+++ b/src/Control/Exception/Lens.hs
@@ -112,7 +112,9 @@
   ,  Maybe(..), Either(..), Functor(..), String, IO
   )
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use Control.Exception.catch" #-}
+#endif
 
 -- $setup
 -- >>> :set -XNoOverloadedStrings
diff --git a/src/Control/Lens.hs b/src/Control/Lens.hs
--- a/src/Control/Lens.hs
+++ b/src/Control/Lens.hs
@@ -99,4 +99,6 @@
 import Control.Lens.Zipper
 import Control.Lens.Zoom
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use import/export shortcut" #-}
+#endif
diff --git a/src/Control/Lens/Equality.hs b/src/Control/Lens/Equality.hs
--- a/src/Control/Lens/Equality.hs
+++ b/src/Control/Lens/Equality.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE TypeFamilies #-}
@@ -28,8 +29,10 @@
 import Control.Lens.Internal.Setter
 import Control.Lens.Type
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use id" #-}
 {-# ANN module "HLint: ignore Eta reduce" #-}
+#endif
 
 -- $setup
 -- >>> import Control.Lens
diff --git a/src/Control/Lens/Fold.hs b/src/Control/Lens/Fold.hs
--- a/src/Control/Lens/Fold.hs
+++ b/src/Control/Lens/Fold.hs
@@ -163,9 +163,11 @@
 -- >>> let g :: Expr -> Expr; g = Debug.SimpleReflect.Vars.g
 -- >>> let timingOut :: NFData a => a -> IO a; timingOut = fmap (fromMaybe (error "timeout")) . timeout (5*10^6) . evaluate . force
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Eta reduce" #-}
 {-# ANN module "HLint: ignore Use camelCase" #-}
 {-# ANN module "HLint: ignore Use curry" #-}
+#endif
 
 infixl 8 ^.., ^?, ^?!, ^@.., ^@?, ^@?!
 
diff --git a/src/Control/Lens/Internal.hs b/src/Control/Lens/Internal.hs
--- a/src/Control/Lens/Internal.hs
+++ b/src/Control/Lens/Internal.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Lens.Internal
@@ -43,4 +44,6 @@
 import Control.Lens.Internal.Setter
 import Control.Lens.Internal.Zoom
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use import/export shortcut" #-}
+#endif
diff --git a/src/Control/Lens/Internal/Zipper.hs b/src/Control/Lens/Internal/Zipper.hs
--- a/src/Control/Lens/Internal/Zipper.hs
+++ b/src/Control/Lens/Internal/Zipper.hs
@@ -53,7 +53,9 @@
 -- >>> import Control.Lens
 -- >>> import Data.Char
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use foldl" #-}
+#endif
 
 ------------------------------------------------------------------------------
 -- * Jacket
diff --git a/src/Control/Lens/Iso.hs b/src/Control/Lens/Iso.hs
--- a/src/Control/Lens/Iso.hs
+++ b/src/Control/Lens/Iso.hs
@@ -82,7 +82,9 @@
 import Data.Profunctor
 import Data.Profunctor.Unsafe
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use on" #-}
+#endif
 
 -- $setup
 -- >>> :set -XNoOverloadedStrings
diff --git a/src/Control/Lens/Lens.hs b/src/Control/Lens/Lens.hs
--- a/src/Control/Lens/Lens.hs
+++ b/src/Control/Lens/Lens.hs
@@ -126,7 +126,9 @@
 import Data.Profunctor.Unsafe
 import Data.Void
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use ***" #-}
+#endif
 
 -- $setup
 -- >>> :set -XNoOverloadedStrings
diff --git a/src/Control/Lens/Operators.hs b/src/Control/Lens/Operators.hs
--- a/src/Control/Lens/Operators.hs
+++ b/src/Control/Lens/Operators.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Lens.Operators
@@ -108,4 +109,6 @@
 import Control.Lens.Setter
 import Control.Lens.Zipper
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use import/export shortcut" #-}
+#endif
diff --git a/src/Control/Lens/Plated.hs b/src/Control/Lens/Plated.hs
--- a/src/Control/Lens/Plated.hs
+++ b/src/Control/Lens/Plated.hs
@@ -95,7 +95,9 @@
 import           Data.Monoid
 import           Data.Tree
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Reduce duplication" #-}
+#endif
 
 -- | A 'Plated' type is one where we know how to extract its immediate self-similar children.
 --
diff --git a/src/Control/Lens/Setter.hs b/src/Control/Lens/Setter.hs
--- a/src/Control/Lens/Setter.hs
+++ b/src/Control/Lens/Setter.hs
@@ -87,7 +87,9 @@
 import Data.Profunctor.Rep
 import Data.Profunctor.Unsafe
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Avoid lambda" #-}
+#endif
 
 -- $setup
 -- >>> import Control.Lens
diff --git a/src/Control/Lens/TH.hs b/src/Control/Lens/TH.hs
--- a/src/Control/Lens/TH.hs
+++ b/src/Control/Lens/TH.hs
@@ -87,7 +87,9 @@
 import Language.Haskell.TH.Syntax
 import Language.Haskell.TH.Lens
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Use foldl" #-}
+#endif
 
 -- | Flags for 'Lens' construction
 data LensFlag
diff --git a/src/Control/Lens/Traversal.hs b/src/Control/Lens/Traversal.hs
--- a/src/Control/Lens/Traversal.hs
+++ b/src/Control/Lens/Traversal.hs
@@ -115,7 +115,6 @@
 import Control.Applicative.Backwards
 import Control.Category
 import Control.Comonad
-import Control.Monad
 import Control.Lens.Combinators
 import Control.Lens.Fold
 import Control.Lens.Getter (coerced)
@@ -123,17 +122,20 @@
 import Control.Lens.Internal.Context
 import Control.Lens.Internal.Indexed
 import Control.Lens.Type
+import Control.Monad
 import Control.Monad.Trans.State.Lazy
 import Data.Functor.Compose
 import Data.Int
 import Data.IntMap as IntMap
 import Data.Map as Map
 import Data.Monoid
-import Data.Traversable
-import Data.Tuple (swap)
 import Data.Profunctor
 import Data.Profunctor.Rep
 import Data.Profunctor.Unsafe
+import Data.Tagged
+import Data.Traversable
+import Data.Tuple (swap)
+import GHC.Magic (inline)
 import Prelude hiding ((.),id)
 
 -- $setup
@@ -470,9 +472,9 @@
 
 -- | An indexed version of 'partsOf' that receives the entire list of indices as its index.
 ipartsOf :: forall i p f s t a. (Indexable [i] p, Functor f) => Traversing (Indexed i) f s t a a -> Over p f s t [a] [a]
-ipartsOf l f s = outs b <$> indexed f (is :: [i]) as where
-  (is,as) = unzip (pins b)
-  b = l sell s
+ipartsOf l = conjoined
+  (\f s -> let b = inline l sell s                            in outs b <$> f (wins b))
+  (\f s -> let b = inline l sell s; (is, as) = unzip (pins b) in outs b <$> indexed f (is :: [i]) as)
 {-# INLINE ipartsOf #-}
 
 -- | A type-restricted version of 'partsOf' that can only be used with a 'Traversal'.
@@ -482,9 +484,9 @@
 
 -- | A type-restricted version of 'ipartsOf' that can only be used with an 'IndexedTraversal'.
 ipartsOf' :: forall i p f s t a. (Indexable [i] p, Functor f) => Over (Indexed i) (Bazaar' (Indexed i) a) s t a a -> Over p f s t [a] [a]
-ipartsOf' l f s = outs b <$> indexed f (is :: [i]) as where
-  (is,as) = unzip (pins b)
-  b = l sell s
+ipartsOf' l = conjoined
+  (\f s -> let b = inline l sell s                            in outs b <$> f (wins b))
+  (\f s -> let b = inline l sell s; (is, as) = unzip (pins b) in outs b <$> indexed f (is :: [i]) as)
 {-# INLINE ipartsOf' #-}
 
 -- | 'unsafePartsOf' turns a 'Traversal' into a 'Data.Data.Lens.uniplate' (or 'Data.Data.Lens.biplate') family.
@@ -513,9 +515,9 @@
 
 -- | An indexed version of 'unsafePartsOf' that receives the entire list of indices as its index.
 iunsafePartsOf :: forall i p f s t a b. (Indexable [i] p, Functor f) => Traversing (Indexed i) f s t a b -> Over p f s t [a] [b]
-iunsafePartsOf l f s = unsafeOuts b <$> indexed f (is :: [i]) as where
-  (is,as) = unzip (pins b)
-  b = l sell s
+iunsafePartsOf l = conjoined
+  (\f s -> let b = inline l sell s                           in unsafeOuts b <$> f (wins b))
+  (\f s -> let b = inline l sell s; (is,as) = unzip (pins b) in unsafeOuts b <$> indexed f (is :: [i]) as)
 {-# INLINE iunsafePartsOf #-}
 
 unsafePartsOf' :: ATraversal s t a b -> Lens s t [a] [b]
@@ -523,9 +525,9 @@
 {-# INLINE unsafePartsOf' #-}
 
 iunsafePartsOf' :: forall i s t a b. Over (Indexed i) (Bazaar (Indexed i) a b) s t a b -> IndexedLens [i] s t [a] [b]
-iunsafePartsOf' l f s = unsafeOuts b <$> indexed f (is :: [i]) as where
-  (is,as) = unzip (pins b)
-  b = l sell s
+iunsafePartsOf' l = conjoined
+  (\f s -> let b = inline l sell s                            in unsafeOuts b <$> f (wins b))
+  (\f s -> let b = inline l sell s; (is, as) = unzip (pins b) in unsafeOuts b <$> indexed f (is :: [i]) as)
 {-# INLINE iunsafePartsOf' #-}
 
 -- | The one-level version of 'Control.Lens.Plated.contextsOf'. This extracts a list of the immediate children according to a given 'Traversal' as editable contexts.
@@ -544,11 +546,19 @@
 -- 'holesOf' :: 'IndexedLens'' i s a      -> s -> ['Pretext'' ('Indexed' i) a s]
 -- 'holesOf' :: 'IndexedTraversal'' i s a -> s -> ['Pretext'' ('Indexed' i) a s]
 -- @
-holesOf :: Conjoined p => Over p (Bazaar p a a) s t a a -> s -> [Pretext p a a t]
-holesOf l s = f (pins b) (unsafeOuts b) where
-  b = l sell s
-  f [] _ = []
-  f (wx:xs) g = Pretext (\wxfy -> g . (:Prelude.map extract xs) <$> corep wxfy wx) : f xs (g . (extract wx:))
+holesOf :: forall p s t a. Conjoined p => Over p (Bazaar p a a) s t a a -> s -> [Pretext p a a t]
+holesOf l s = unTagged
+  ( conjoined
+     (Tagged $ let
+        f [] _ = []
+        f (x:xs) g = Pretext (\xfy -> g . (:xs) <$> xfy x) : f xs (g . (x:))
+      in f (ins b) (unsafeOuts b))
+     (Tagged $ let
+        f [] _ = []
+        f (wx:xs) g = Pretext (\wxfy -> g . (:Prelude.map extract xs) <$> corep wxfy wx) : f xs (g . (extract wx:))
+      in f (pins b) (unsafeOuts b))
+    :: Tagged (p a b) [Pretext p a a t]
+  ) where b = l sell s
 {-# INLINE holesOf #-}
 
 -- | This converts a 'Traversal' that you \"know\" will target one or more elements to a 'Lens'. It can
@@ -569,10 +579,13 @@
 singular :: (Conjoined p, Functor f)
          => Over p (BazaarT p f a a) s t a a
          -> Over p f s t a a
-singular l pafb s = case pins b of
-  (w:ws) -> unsafeOuts b . (:Prelude.map extract ws) <$> corep pafb w
-  []     -> unsafeOuts b . return                    <$> corep pafb (error "singular: empty traversal")
-  where b = l sell s
+singular l = conjoined
+  (\afb s -> let b = l sell s in case ins b of
+    (w:ws) -> unsafeOuts b . (:ws) <$> afb w
+    []     -> unsafeOuts b . return <$> afb (error "singular: empty traversal"))
+  (\pafb s -> let b = l sell s in case pins b of
+    (w:ws) -> unsafeOuts b . (:Prelude.map extract ws) <$> corep pafb w
+    []     -> unsafeOuts b . return                    <$> corep pafb (error "singular: empty traversal"))
 {-# INLINE singular #-}
 
 -- | This converts a 'Traversal' that you \"know\" will target only one element to a 'Lens'. It can also be
@@ -592,11 +605,15 @@
 unsafeSingular :: (Conjoined p, Functor f)
                => Over p (BazaarT p f a b) s t a b
                -> Over p f s t a b
-unsafeSingular l pafb s = case pins b of
-  [w] -> unsafeOuts b . return <$> corep pafb w
-  []  -> error "unsafeSingular: empty traversal"
-  _   -> error "unsafeSingular: traversing multiple results"
-  where b = l sell s
+unsafeSingular l = conjoined
+  (\afb s -> let b = inline l sell s in case ins b of
+    [w] -> unsafeOuts b . return <$> afb w
+    []  -> error "unsafeSingular: empty traversal"
+    _   -> error "unsafeSingular: traversing multiple results")
+  (\pafb s -> let b = inline l sell s in case pins b of
+    [w] -> unsafeOuts b . return <$> corep pafb w
+    []  -> error "unsafeSingular: empty traversal"
+    _   -> error "unsafeSingular: traversing multiple results")
 {-# INLINE unsafeSingular #-}
 
 ------------------------------------------------------------------------------
@@ -607,6 +624,10 @@
 ins = toListOf (coerced bazaar)
 {-# INLINE ins #-}
 
+wins :: (Bizarre p w, Corepresentable p, Comonad (Corep p)) => w a b t -> [a]
+wins = getConst #. bazaar (cotabulate $ \ra -> Const [extract ra])
+{-# INLINE wins #-}
+
 pins :: (Bizarre p w, Corepresentable p) => w a b t -> [Corep p a]
 pins = getConst #. bazaar (cotabulate $ \ra -> Const [ra])
 {-# INLINE pins #-}
@@ -716,7 +737,9 @@
         => Int
        -> Over p (BazaarT p f a a) s t a a
        -> Over p f s t a a
-taking n l pafb s = outs b <$> traverse (corep pafb) (take n $ pins b) where b = l sell s
+taking n l = conjoined
+  (\ afb s  -> let b = inline l sell s in outs b <$> traverse afb          (take n $ ins b))
+  (\ pafb s -> let b = inline l sell s in outs b <$> traverse (corep pafb) (take n $ pins b))
 {-# INLINE taking #-}
 
 -- | Visit all but the first /n/ targets of a 'Traversal', 'Fold', 'Getter' or 'Lens'.
diff --git a/src/Data/Data/Lens.hs b/src/Data/Data/Lens.hs
--- a/src/Data/Data/Lens.hs
+++ b/src/Data/Data/Lens.hs
@@ -10,6 +10,7 @@
 #ifdef TRUSTWORTHY
 {-# LANGUAGE Trustworthy #-}
 #endif
+{-# OPTIONS_GHC -fno-full-laziness #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Data.Lens
@@ -65,9 +66,11 @@
 import           GHC.Exts (realWorld#)
 #endif
 
+#ifdef HLINT
 {-# ANN module "HLint: ignore Eta reduce" #-}
 {-# ANN module "HLint: ignore Use foldl" #-}
 {-# ANN module "HLint: ignore Reduce duplication" #-}
+#endif
 
 -- $setup
 -- >>> :set -XNoOverloadedStrings
