diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,11 @@
+1.1.0 (Changes from 1.0.1)
+=========================
+* Some type synonym definitions have been altered, but should be equivalent.
+* Removed Getting and Setting functors and instead use the equivalent standard functors Const and Identity.
+* Renamed Setter to ASetter and generalized Setters to be a LensLike constrained to an "Identical" functor.
+* Added the (<~) operator.
+* Corrected the definition of ATraversal'
+
 1.0.1 (Changes from 1.0.0)
 =========================
 * Bump dependency on transformers
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2012 Russell O'Connor
+Copyright 2012,2013,2014 Russell O'Connor
 
 All rights reserved.
 
diff --git a/lens-family-core.cabal b/lens-family-core.cabal
--- a/lens-family-core.cabal
+++ b/lens-family-core.cabal
@@ -1,13 +1,13 @@
 name:               lens-family-core
 category:           Data, Lenses
-version:            1.0.1
+version:            1.1.0
 license:            BSD3
 cabal-version:      >= 1.6
 license-file:       LICENSE
 author:             Russell O'Connor
 maintainer:         Russell O'Connor <roconnor@theorem.ca>
 stability:          experimental
-copyright:          Copyright (C) 2012,2013 Russell O'Connor
+copyright:          Copyright (C) 2012,2013,2014 Russell O'Connor
 synopsis:           Haskell 98 Lens Families
 description:        Haskell 98 Lens Families
 build-type:         Simple
@@ -47,9 +47,9 @@
     Lens.Family.State.Strict
     Lens.Family.State
   other-modules:
+    Lens.Family.Identical
     Lens.Family.Phantom
     Lens.Family.State.Zoom
-    Lens.Family.Setting
 
   ghc-options:      -Wall
 
diff --git a/src/Lens/Family.hs b/src/Lens/Family.hs
--- a/src/Lens/Family.hs
+++ b/src/Lens/Family.hs
@@ -48,12 +48,12 @@
 -- The result will be a 'Data.Monid.mconcat' of all the fields referenced.
 -- The various @fooOf@ functions can be used to access different monoidal summaries of some kinds of values.
 --
--- '^?' can be used to access the first value of a traverasal.
+-- '^?' can be used to access the first value of a traversal.
 -- 'Nothing' is returned when the traversal has no references.
 --
 -- '^..' can be used with a traversals and will return a list of all fields referenced.
 --
--- When '.~' is used with a traveral, all referenced fields will be set to the same value, and when '%~' is used with a traversal, all referenced fields will be modified with the same function.
+-- When '.~' is used with a traversal, all referenced fields will be set to the same value, and when '%~' is used with a traversal, all referenced fields will be modified with the same function.
 --
 -- Like lenses, traversals can be composed with '.', and because every lens is automatically a traversal, lenses and traversals can be composed with '.' yielding a traversal.
 --
@@ -85,42 +85,33 @@
 -- * Pseudo-imperatives
   , (+~), (*~), (-~), (//~), (&&~), (||~), (<>~)
 -- * Types
-  , Setter, Setter'
   , LensLike, LensLike'
   , FoldLike, FoldLike'
-  , Getting, Setting
+  , ASetter, ASetter'
   , Phantom
+  , Constant, Identity
 -- * Re-exports
   , Applicative, Foldable, Monoid
   , Backwards, All, Any, First, Last, Sum, Product
   ) where
 
-import Control.Applicative (Applicative, pure, (<*>))
+import Control.Applicative (Applicative)
 import Control.Applicative.Backwards (Backwards(..))
 import Data.Foldable (Foldable, traverse_)
-import Data.Monoid ( Monoid, mempty, mappend
+import Data.Functor.Identity (Identity(..))
+import Data.Functor.Constant (Constant(..))
+import Data.Monoid ( Monoid, mappend
                    , All(..), Any(..)
                    , First(..), Last(..)
                    , Sum(..), Product(..)
                    )
 import Lens.Family.Phantom (Phantom, coerce)
-import Lens.Family.Setting (Setting(..))
-import Lens.Family.Unchecked ( LensLike, LensLike'
-                             , Setter, Setter')
-
-newtype Getting c a = Getting { unGetting :: c }
-instance Functor (Getting c) where
-  fmap _ (Getting c) = Getting c
-
-instance Phantom (Getting c) where
-  coerce (Getting c) = Getting c
-
-instance Monoid c => Applicative (Getting c) where
-  pure _ = Getting mempty
-  Getting a <*> Getting b = Getting (a `mappend` b)
+import Lens.Family.Unchecked ( LensLike, LensLike' )
 
-type FoldLike r a a' b b' = LensLike (Getting r) a a' b b'
-type FoldLike' r a b = LensLike (Getting r) a a b b
+type FoldLike r a a' b b' = LensLike (Constant r) a a' b b'
+type FoldLike' r a b = LensLike' (Constant r) a b
+type ASetter a a' b b' = LensLike Identity a a' b b'
+type ASetter' a b = LensLike' Identity a b
 
 to :: Phantom f => (a -> b) -> LensLike f a a' b b'
 -- ^ @
@@ -174,7 +165,7 @@
 -- @
 -- views l f a = f (view l a)
 -- @
-views l f = unGetting . l (Getting . f)
+views l f = getConstant . l (Constant . f)
 
 toListOf :: FoldLike [b] a a' b b' -> a -> [b]
 -- ^ @
@@ -249,7 +240,7 @@
 -- @
 --
 -- Returns true if the number of references in the input is zero.
-nullOf l = getAll . views l (const (All False))
+nullOf l = allOf l (const False)
 
 infixr 8 ^.
 
@@ -265,7 +256,7 @@
 -- @
 --
 -- Access the monoidal summary referenced by a getter or lens.
-x^.l = unGetting $ l Getting x
+x^.l = getConstant $ l Constant x
 
 infixr 8 ^..
 
@@ -299,29 +290,30 @@
 -- @
 -- backwards :: Lens a a' b b' -> Lens a a' b b'
 -- backwards :: Getter a a' b b' -> Getter a a' b b'
+-- backwards :: Setter a a' b b' -> Setter a a' b b'
 -- @
 --
--- No effect on lenses or getters.
+-- No effect on lenses, getters or setters.
 backwards l f = forwards . l (Backwards . f)
 
 -- | Demote a setter to a semantic editor combinator.
-over :: Setter a a' b b' -> (b -> b') -> a -> a'
+over :: ASetter a a' b b' -> (b -> b') -> a -> a'
 over l = (l %~)
 
 infixr 4 %~
 
 -- | Modify all referenced fields.
-(%~) :: Setter a a' b b' -> (b -> b') -> a -> a'
-l %~ f = unSetting . l (Setting . f)
+(%~) :: ASetter a a' b b' -> (b -> b') -> a -> a'
+l %~ f = runIdentity . l (Identity . f)
 
 infixr 4 .~
 
 -- | Set all referenced fields to the given value.
-(.~) :: Setter a a' b b' -> b' -> a -> a'
+(.~) :: ASetter a a' b b' -> b' -> a -> a'
 l .~ b = l %~ const b
 
 -- | Set all referenced fields to the given value.
-set :: Setter a a' b b' -> b' -> a -> a'
+set :: ASetter a a' b b' -> b' -> a -> a'
 set = (.~)
 
 infixl 1 &
@@ -332,24 +324,24 @@
 
 infixr 4 +~, -~, *~
 
-(+~), (-~), (*~) :: Num b => Setter' a b -> b -> a -> a
+(+~), (-~), (*~) :: Num b => ASetter' a b -> b -> a -> a
 f +~ b = f %~ (+ b)
 f -~ b = f %~ subtract b
 f *~ b = f %~ (* b)
 
 infixr 4 //~
 
-(//~) :: Fractional b => Setter' a b -> b -> a -> a
+(//~) :: Fractional b => ASetter' a b -> b -> a -> a
 f //~ b = f %~ (/ b)
 
 infixr 4 &&~, ||~
 
-(&&~), (||~) :: Setter' a Bool -> Bool -> a -> a
+(&&~), (||~) :: ASetter' a Bool -> Bool -> a -> a
 f &&~ b = f %~ (&& b)
 f ||~ b = f %~ (|| b)
 
 infixr 4 <>~
 
 -- | Monoidally append a value to all referenced fields.
-(<>~) :: (Monoid o) => Setter' a o -> o -> a -> a
+(<>~) :: (Monoid o) => ASetter' a o -> o -> a -> a
 f <>~ o = f %~ (`mappend` o)
diff --git a/src/Lens/Family/Clone.hs b/src/Lens/Family/Clone.hs
--- a/src/Lens/Family/Clone.hs
+++ b/src/Lens/Family/Clone.hs
@@ -5,6 +5,8 @@
 --
 -- * @Traversal@, @Traversal'@
 --
+-- * @Setter@, @Setter'@
+--
 -- * @Fold@, @Fold'@
 --
 -- * @Getter@, @Getter'@
@@ -24,12 +26,11 @@
 --
 -- /Note/: It is important to eta-expand the definition of 'cl' to avoid the dreaded monomorphism restriction.
 --
--- 'cloneTraversal', 'cloneGetter', and 'cloneFold' provides similar functionality for traversals, getters and folds respectively.
--- Setters are already monomorphic, so do not need to be cloned.
+-- 'cloneTraversal', 'cloneGetter', 'cloneSetter', and 'cloneFold' provides similar functionality for traversals, getters, setters, and folds respectively.
 --
 -- /Note/: Cloning is only need if you use a functional reference multiple times with different instances.
 module Lens.Family.Clone
-  ( cloneLens, cloneTraversal, cloneGetter, cloneFold
+  ( cloneLens, cloneTraversal, cloneSetter, cloneGetter, cloneFold
   -- * Types
   , ALens, ALens'
   , ATraversal, ATraversal'
@@ -37,13 +38,15 @@
   , AFold, AFold'
   , IStore, IKleeneStore
   -- * Re-exports
-  , LensLike, FoldLike
-  , Applicative, Phantom
+  , LensLike, LensLike', FoldLike, FoldLike', ASetter
+  , Applicative, Phantom, Identical
   ) where
 
 import Control.Applicative (Applicative, pure, (<*>), (<$>))
-import Lens.Family ( LensLike
-                   , FoldLike, toListOf, folding
+import Lens.Family.Unchecked (Identical, setting)
+import Lens.Family ( LensLike, LensLike'
+                   , ASetter, over
+                   , FoldLike, FoldLike', toListOf, folding
                    , to, view
                    , Phantom
                    )
@@ -56,7 +59,7 @@
 type ALens a a' b b' = LensLike (IStore b b') a a' b b'
 
 -- | ALens' a b is a universal Lens' a b instance
-type ALens' a b = ALens a a b b
+type ALens' a b = LensLike' (IStore b b) a b
 
 -- | Converts a universal lens instance back into a polymorphic lens.
 cloneLens :: Functor f => ALens a a' b b' -> LensLike f a a' b b'
@@ -81,7 +84,7 @@
 type ATraversal a a' b b' = LensLike (IKleeneStore b b') a a' b b'
 
 -- | ATraversal' a b is a universal Traversal' a b instance
-type ATraversal' a b = ALens a a b b
+type ATraversal' a b = LensLike' (IKleeneStore b b) a b
 
 -- | Converts a universal traversal instance back into a polymorphic traversal.
 cloneTraversal :: Applicative f => ATraversal a a' b b' -> LensLike f a a' b b'
@@ -91,11 +94,15 @@
 research _ (Unit a) = pure a
 research f (Battery g b) = research f g <*> f b
 
+-- | Converts a universal setter instance back into a polymorphic setter.
+cloneSetter :: Identical f => ASetter a a' b b' -> LensLike f a a' b b'
+cloneSetter = setting . over
+
 -- | AFold a a' b b' is a universal Fold' a a' b b' instance
 type AFold a a' b b' = FoldLike [b] a a' b b'
 
 -- | AFold' a b is a universal Fold' a b instance
-type AFold' a b = AFold a a b b
+type AFold' a b = FoldLike' [b] a b
 
 -- | Converts a universal fold instance back into a polymorphic fold.
 cloneFold :: (Phantom f, Applicative f) => AFold a a' b b' -> LensLike f a a' b b'
@@ -105,7 +112,7 @@
 type AGetter a a' b b' = FoldLike b a a' b b'
 
 -- | AGetter' a b is a universal Fold' a b instance
-type AGetter' a b = AGetter a a b b
+type AGetter' a b = FoldLike' b a b
 
 -- | Converts a universal getter instance back into a polymorphic getter.
 cloneGetter :: Phantom f => AGetter a a' b b' -> LensLike f a a' b b'
diff --git a/src/Lens/Family/Identical.hs b/src/Lens/Family/Identical.hs
new file mode 100644
--- /dev/null
+++ b/src/Lens/Family/Identical.hs
@@ -0,0 +1,19 @@
+module Lens.Family.Identical where
+
+import Control.Applicative
+import Control.Applicative.Backwards (Backwards(..))
+import Data.Functor.Identity (Identity(..))
+import Data.Functor.Compose (Compose(..))
+
+-- It would really be much better if comonads was in tranformers
+class Applicative f => Identical f where
+  extract :: f a -> a
+
+instance Identical Identity where
+  extract (Identity x) = x
+
+instance Identical f => Identical (Backwards f) where
+  extract (Backwards x) = extract x
+
+instance (Identical f, Identical g) => Identical (Compose f g) where
+  extract (Compose x) = extract (extract x)
diff --git a/src/Lens/Family/Setting.hs b/src/Lens/Family/Setting.hs
deleted file mode 100644
--- a/src/Lens/Family/Setting.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Lens.Family.Setting where
-
-import Control.Applicative (Applicative, pure, (<*>))
-
-newtype Setting a = Setting { unSetting :: a }
-
-instance Functor Setting where
-  fmap f (Setting a) = Setting (f a)
-
-instance Applicative Setting where
-  pure = Setting
-  Setting f <*> Setting a = Setting (f a)
diff --git a/src/Lens/Family/State/Lazy.hs b/src/Lens/Family/State/Lazy.hs
--- a/src/Lens/Family/State/Lazy.hs
+++ b/src/Lens/Family/State/Lazy.hs
@@ -7,6 +7,7 @@
   , (%=)
   , assign, (.=)
   , (%%=)
+  , (<~)
 -- * Compound Assignments
   , (+=), (-=), (*=)
   , (//=)
@@ -16,8 +17,8 @@
   , Zooming
 -- * Re-exports
   , LensLike, LensLike'
-  , FoldLike
-  , Setter, Setter'
+  , FoldLike, Constant
+  , ASetter, ASetter', Identity
   , StateT, Writer
   , Monoid
   ) where
@@ -28,8 +29,8 @@
 import Control.Monad.Trans.Writer.Lazy (Writer, writer, runWriter)
 import Control.Monad.Trans.State.Lazy (StateT(..), state, get, modify)
 import Lens.Family ( LensLike, LensLike'
-                   , FoldLike
-                   , Setter, Setter'
+                   , FoldLike, Constant
+                   , ASetter, ASetter', Identity
                    , view, views, (%~)
                    )
 import Lens.Family.State.Zoom (Zooming(..))
@@ -84,25 +85,31 @@
 --
 -- Retrieve a field of the state and pass it through the function @f :: b -> r@.
 --
--- @uses l f = f <$> use l@
+-- @uses l f = f \<$> use l@
 uses l f = views l f `liftM` get
 
 infix 4 %=
 
 -- | Modify a field of the state.
-(%=) :: Monad m => Setter a a b b' -> (b -> b') -> StateT a m ()
+(%=) :: Monad m => ASetter a a b b' -> (b -> b') -> StateT a m ()
 l %= f = modify (l %~ f)
 
 infix 4 .=
 
 -- | Set a field of the state.
-(.=) :: Monad m => Setter a a b b' -> b' -> StateT a m ()
+(.=) :: Monad m => ASetter a a b b' -> b' -> StateT a m ()
 l .= v = l %= const v
 
 -- | Set a field of the state.
-assign :: Monad m => Setter a a b b' -> b' -> StateT a m ()
+assign :: Monad m => ASetter a a b b' -> b' -> StateT a m ()
 assign = (.=)
 
+infixr 2 <~
+
+-- | Set a field of the state using the result of executing a stateful command.
+(<~) :: Monad m => ASetter a a b b' -> StateT a m b' -> StateT a m ()
+l <~ v = assign l =<< v
+
 infix 4 %%=
 
 (%%=) :: Monad m => LensLike (Writer c) a a b b' -> (b -> (c, b')) -> StateT a m c
@@ -121,24 +128,24 @@
 
 infixr 4 +=, -=, *=
 
-(+=), (-=), (*=) :: (Monad m, Num b) => Setter' a b -> b -> StateT a m ()
+(+=), (-=), (*=) :: (Monad m, Num b) => ASetter' a b -> b -> StateT a m ()
 f += b = f %= (+ b)
 f -= b = f %= subtract b
 f *= b = f %= (* b)
 
 infixr 4 //=
 
-(//=) :: (Monad m, Fractional b) => Setter' a b -> b -> StateT a m ()
+(//=) :: (Monad m, Fractional b) => ASetter' a b -> b -> StateT a m ()
 f //= b = f %= (/ b)
 
 infixr 4 &&=, ||=
 
-(&&=), (||=) :: Monad m => Setter' a Bool -> Bool -> StateT a m ()
+(&&=), (||=) :: Monad m => ASetter' a Bool -> Bool -> StateT a m ()
 f &&= b = f %= (&& b)
 f ||= b = f %= (|| b)
 
 infixr 4 <>=
 
 -- | Monoidally append a value to all referenced fields of the state.
-(<>=) :: (Monoid o, Monad m) => Setter' a o -> o -> StateT a m ()
+(<>=) :: (Monoid o, Monad m) => ASetter' a o -> o -> StateT a m ()
 f <>= b = f %= (`mappend` b)
diff --git a/src/Lens/Family/State/Strict.hs b/src/Lens/Family/State/Strict.hs
--- a/src/Lens/Family/State/Strict.hs
+++ b/src/Lens/Family/State/Strict.hs
@@ -7,6 +7,7 @@
   , (%=)
   , assign, (.=)
   , (%%=)
+  , (<~)
 -- * Compound Assignments
   , (+=), (-=), (*=)
   , (//=)
@@ -16,8 +17,8 @@
   , Zooming
 -- * Re-exports
   , LensLike, LensLike'
-  , FoldLike
-  , Setter, Setter'
+  , FoldLike, Constant
+  , ASetter, ASetter', Identity
   , StateT, Writer
   , Monoid
   ) where
@@ -28,8 +29,8 @@
 import Control.Monad.Trans.Writer.Lazy (Writer, writer, runWriter)
 import Control.Monad.Trans.State.Strict (StateT(..), state, get, modify)
 import Lens.Family ( LensLike, LensLike'
-                   , FoldLike
-                   , Setter, Setter'
+                   , FoldLike, Constant
+                   , ASetter, ASetter', Identity
                    , view, views, (%~)
                    )
 import Lens.Family.State.Zoom (Zooming(..))
@@ -84,25 +85,31 @@
 --
 -- Retrieve a field of the state and pass it through the function @f :: b -> r@.
 --
--- @uses l f = f <$> use l@
+-- @uses l f = f \<$> use l@
 uses l f = views l f `liftM` get
 
 infix 4 %=
 
 -- | Modify a field of the state.
-(%=) :: Monad m => Setter a a b b' -> (b -> b') -> StateT a m ()
+(%=) :: Monad m => ASetter a a b b' -> (b -> b') -> StateT a m ()
 l %= f = modify (l %~ f)
 
 infix 4 .=
 
 -- | Set a field of the state.
-(.=) :: Monad m => Setter a a b b' -> b' -> StateT a m ()
+(.=) :: Monad m => ASetter a a b b' -> b' -> StateT a m ()
 l .= v = l %= const v
 
 -- | Set a field of the state.
-assign :: Monad m => Setter a a b b' -> b' -> StateT a m ()
+assign :: Monad m => ASetter a a b b' -> b' -> StateT a m ()
 assign = (.=)
 
+infixr 2 <~
+
+-- | Set a field of the state using the result of executing a stateful command.
+(<~) :: Monad m => ASetter a a b b' -> StateT a m b' -> StateT a m ()
+l <~ v = assign l =<< v
+
 infix 4 %%=
 
 (%%=) :: Monad m => LensLike (Writer c) a a b b' -> (b -> (c, b')) -> StateT a m c
@@ -121,24 +128,24 @@
 
 infixr 4 +=, -=, *=
 
-(+=), (-=), (*=) :: (Monad m, Num b) => Setter' a b -> b -> StateT a m ()
+(+=), (-=), (*=) :: (Monad m, Num b) => ASetter' a b -> b -> StateT a m ()
 f += b = f %= (+ b)
 f -= b = f %= subtract b
 f *= b = f %= (* b)
 
 infixr 4 //=
 
-(//=) :: (Monad m, Fractional b) => Setter' a b -> b -> StateT a m ()
+(//=) :: (Monad m, Fractional b) => ASetter' a b -> b -> StateT a m ()
 f //= b = f %= (/ b)
 
 infixr 4 &&=, ||=
 
-(&&=), (||=) :: Monad m => Setter' a Bool -> Bool -> StateT a m ()
+(&&=), (||=) :: Monad m => ASetter' a Bool -> Bool -> StateT a m ()
 f &&= b = f %= (&& b)
 f ||= b = f %= (|| b)
 
 infixr 4 <>=
 
 -- | Monoidally append a value to all referenced fields of the state.
-(<>=) :: (Monoid o, Monad m) => Setter' a o -> o -> StateT a m ()
+(<>=) :: (Monoid o, Monad m) => ASetter' a o -> o -> StateT a m ()
 f <>= b = f %= (`mappend` b)
diff --git a/src/Lens/Family/Stock.hs b/src/Lens/Family/Stock.hs
--- a/src/Lens/Family/Stock.hs
+++ b/src/Lens/Family/Stock.hs
@@ -6,26 +6,29 @@
   , alongside
   , beside
 -- * Stock Lenses
-  , _1, _2, both
+  , _1, _2
   , chosen
   , ix
   , at, intAt
   , contains, intContains
 -- * Stock Traversals
+  , both
   , _Left, _Right
   , _Just, _Nothing
   , ignored
+-- * Stock SECs
+  , mapped
 -- * Types
   , AlongsideLeft, AlongsideRight
 -- * Re-exports
   , LensLike, LensLike'
-  , Applicative
+  , Applicative, Identical
   ) where
 
 import Control.Arrow (first, second)
 import Control.Applicative (Applicative, pure, (<$>), (<*>))
 import Lens.Family (LensLike, LensLike')
-import Lens.Family.Unchecked (lens)
+import Lens.Family.Unchecked (lens, setting, Identical)
 import Lens.Family.Phantom (Phantom, coerce)
 import qualified Data.Map as Map
 import qualified Data.IntMap as IntMap
@@ -188,6 +191,14 @@
 --
 -- The empty traversal on any type.
 ignored _ = pure
+
+mapped :: (Identical f, Functor g) => LensLike f (g a) (g a') a a'
+-- ^ @
+-- mapped :: Functor g => Setter (g a) (g a') a a'
+-- @
+--
+-- An SEC referencing the parameter of a functor.
+mapped = setting fmap
 
 {- Alongside -}
 
diff --git a/src/Lens/Family/Unchecked.hs b/src/Lens/Family/Unchecked.hs
--- a/src/Lens/Family/Unchecked.hs
+++ b/src/Lens/Family/Unchecked.hs
@@ -79,18 +79,15 @@
   , setting
 -- * Types
   , LensLike, LensLike'
-  , Setter, Setter'
-  , Setting
+  , Identical
   ) where
 
-import Lens.Family.Setting (Setting(..))
+import Control.Applicative (pure)
+import Lens.Family.Identical (Identical, extract)
 
 type LensLike f a a' b b' = (b -> f b') -> (a -> f a')
 type LensLike' f a b = (b -> f b) -> (a -> f a)
 
-type Setter a a' b b' = LensLike Setting a a' b b'
-type Setter' a b = Setter a a b b
-
 lens :: Functor f
      => (a -> b) -- ^ getter
      -> (a -> b' -> a') -- ^ setter
@@ -128,7 +125,7 @@
 iso getter setter = lens getter (const setter)
 
 -- | 'setting' promotes a \"semantic editor combinator\" to a modify-only lens.
--- To demote a lens to a semantic edit combinator, use the section @(l %~)@ or @sec l@.
+-- To demote a lens to a semantic edit combinator, use the section @(l %~)@ or @over l@ from "Lens.Family".
 --
 -- >>> setting map . fstL %~ length $ [("The",0),("quick",1),("brown",1),("fox",2)]
 -- [(3,0),(5,1),(5,1),(3,2)]
@@ -138,6 +135,7 @@
 -- * @sec id === id@
 --
 -- * @sec f . sec g === sec (f . g)@
-setting :: ((b -> b') -> a -> a') -- ^ sec (semantic editor combinator)
-        -> Setter a a' b b'
-setting s f = Setting . s (unSetting . f)
+setting :: Identical f
+        => ((b -> b') -> a -> a') -- ^ sec (semantic editor combinator)
+        -> LensLike f a a' b b'
+setting s f = pure . s (extract . f)
