diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,9 @@
+0.0.3
+
+* Add __Unwrapped iso (dual of __Wrapped) with specializations for all type aliases
+* Change ReviewId target from (f x) to (Id f x)
+* Add GetterId, HasId, ReviewId, AsId instances for canonical functors: Identity, Maybe, [], NonEmpty, Either e, (,) w, Const c, Proxy, Tagged s
+
 0.0.2
 
 * Add type classes: GetterId, HasId, ReviewId, AsId
diff --git a/id.cabal b/id.cabal
--- a/id.cabal
+++ b/id.cabal
@@ -1,6 +1,6 @@
 cabal-version:        2.4
 name:                 id
-version:              0.0.2
+version:              0.0.3
 synopsis:             Id (f a) data type
 description:          (f a) data type, with optics and functions for switching the type constructor (f)
 license:              BSD-3-Clause
diff --git a/src/Data/Id.hs b/src/Data/Id.hs
--- a/src/Data/Id.hs
+++ b/src/Data/Id.hs
@@ -46,6 +46,7 @@
 
     -- * Optics
     __Wrapped,
+    __Unwrapped,
     idTagged,
     idProxy,
     just,
@@ -74,6 +75,7 @@
     prism',
     re,
     review,
+    to,
     unto,
     view,
     _Just,
@@ -255,6 +257,47 @@
     Id
 
 -- |
+-- >>> view __Unwrapped [1,2,3] :: Id [] Int
+-- Id [1,2,3]
+--
+-- >>> view (from __Unwrapped) (Id [1,2,3])
+-- [1,2,3]
+--
+-- >>> over __Unwrapped (mapId (fmap (+1))) [1,2,3] :: [Int]
+-- [2,3,4]
+{-# SPECIALIZE __Unwrapped ::
+  Iso (Maybe a) (Maybe a') (IdMaybe a) (IdMaybe a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso (Identity a) (Identity a') (IdIdentity a) (IdIdentity a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso (Either e a) (Either e' a') (IdEither e a) (IdEither e' a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso (w, a) (w', a') (IdWriter w a) (IdWriter w' a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso [a] [a'] (IdList a) (IdList a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso (NonEmpty a) (NonEmpty a') (IdNonEmpty a) (IdNonEmpty a')
+  #-}
+{-# SPECIALIZE __Unwrapped ::
+  Iso (Const c a) (Const c' a') (IdConst c a) (IdConst c' a')
+  #-}
+__Unwrapped ::
+  Iso
+    (f a)
+    (f' a')
+    (Id f a)
+    (Id f' a')
+__Unwrapped =
+  iso
+    Id
+    (\(Id x) -> x)
+
+-- |
 -- >>> unId (Id [1,2,3])
 -- [1,2,3]
 --
@@ -289,6 +332,42 @@
   getId =
     id
 
+instance GetterId (Identity a) Identity a where
+  getId =
+    to Id
+
+instance GetterId (Maybe a) Maybe a where
+  getId =
+    to Id
+
+instance GetterId [a] [] a where
+  getId =
+    to Id
+
+instance GetterId (NonEmpty a) NonEmpty a where
+  getId =
+    to Id
+
+instance GetterId (Either e a) (Either e) a where
+  getId =
+    to Id
+
+instance GetterId (w, a) ((,) w) a where
+  getId =
+    to Id
+
+instance GetterId (Const c a) (Const c) a where
+  getId =
+    to Id
+
+instance GetterId (Proxy a) Proxy a where
+  getId =
+    to Id
+
+instance GetterId (Tagged s a) (Tagged s) a where
+  getId =
+    to Id
+
 -- |
 -- >>> view id' (Id [1,2,3])
 -- Id [1,2,3]
@@ -308,20 +387,92 @@
   setId =
     const
 
+instance HasId (Identity a) Identity a where
+  setId =
+    const . unId
+
+instance HasId (Maybe a) Maybe a where
+  setId =
+    const . unId
+
+instance HasId [a] [] a where
+  setId =
+    const . unId
+
+instance HasId (NonEmpty a) NonEmpty a where
+  setId =
+    const . unId
+
+instance HasId (Either e a) (Either e) a where
+  setId =
+    const . unId
+
+instance HasId (w, a) ((,) w) a where
+  setId =
+    const . unId
+
+instance HasId (Const c a) (Const c) a where
+  setId =
+    const . unId
+
+instance HasId (Proxy a) Proxy a where
+  setId =
+    const . unId
+
+instance HasId (Tagged s a) (Tagged s) a where
+  setId =
+    const . unId
+
 -- |
--- >>> review reviewId [1,2,3] :: Id [] Int
+-- >>> review reviewId (Id [1,2,3]) :: Id [] Int
 -- Id [1,2,3]
 --
--- >>> review reviewId (Identity 7) :: IdIdentity Int
+-- >>> review reviewId (Id (Identity 7)) :: IdIdentity Int
 -- Id (Identity 7)
 class ReviewId a f x | a -> f x where
   reviewId ::
-    Review a (f x)
+    Review a (Id f x)
 
 instance ReviewId (Id f a) f a where
   reviewId =
-    unto Id
+    unto id
 
+instance ReviewId (Identity a) Identity a where
+  reviewId =
+    unto unId
+
+instance ReviewId (Maybe a) Maybe a where
+  reviewId =
+    unto unId
+
+instance ReviewId [a] [] a where
+  reviewId =
+    unto unId
+
+instance ReviewId (NonEmpty a) NonEmpty a where
+  reviewId =
+    unto unId
+
+instance ReviewId (Either e a) (Either e) a where
+  reviewId =
+    unto unId
+
+instance ReviewId (w, a) ((,) w) a where
+  reviewId =
+    unto unId
+
+instance ReviewId (Const c a) (Const c) a where
+  reviewId =
+    unto unId
+
+instance ReviewId (Proxy a) Proxy a where
+  reviewId =
+    unto unId
+
+instance ReviewId (Tagged s a) (Tagged s) a where
+  reviewId =
+    unto unId
+
 -- |
 -- >>> preview _Id (Id [1,2,3])
 -- Just (Id [1,2,3])
@@ -335,11 +486,47 @@
   _Id ::
     Prism' a (Id f x)
   _Id =
-    prism' (review reviewId . unId) matchId
+    prism' (review reviewId) matchId
 
 instance AsId (Id f a) f a where
   matchId =
     Just
+
+instance AsId (Identity a) Identity a where
+  matchId =
+    Just . Id
+
+instance AsId (Maybe a) Maybe a where
+  matchId =
+    Just . Id
+
+instance AsId [a] [] a where
+  matchId =
+    Just . Id
+
+instance AsId (NonEmpty a) NonEmpty a where
+  matchId =
+    Just . Id
+
+instance AsId (Either e a) (Either e) a where
+  matchId =
+    Just . Id
+
+instance AsId (w, a) ((,) w) a where
+  matchId =
+    Just . Id
+
+instance AsId (Const c a) (Const c) a where
+  matchId =
+    Just . Id
+
+instance AsId (Proxy a) Proxy a where
+  matchId =
+    Just . Id
+
+instance AsId (Tagged s a) (Tagged s) a where
+  matchId =
+    Just . Id
 
 -- |
 -- >>> Id [1,2,3] <> Id [4,5]
