diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.1.2
+
+- Replace hard-coded wrappers by Data.Monoid’s ones.
+- Fixed typo.
+
 ## 0.1.1
 
 - Added Any.
diff --git a/src/Data/Zero.hs b/src/Data/Zero.hs
--- a/src/Data/Zero.hs
+++ b/src/Data/Zero.hs
@@ -8,11 +8,23 @@
 -- Portability : portable
 -----------------------------------------------------------------------------
 
-module Data.Zero where
+module Data.Zero (
+    -- * Semigroups with absorbing element
+    Zero(..)
+    -- * Num wrappers
+  , Product(..)
+    -- * Boolean wrappers
+  , Any(..)
+  , All(..)
+    -- * Maybe wrappers
+  , Success(..)
+  , success
+  , failure
+  ) where
 
 import Control.Monad.Fix ( MonadFix )
+import Data.Monoid ( All(..), Any(..), Product(..) )
 import Data.Semigroup ( Semigroup(..) )
-import GHC.Generics ( Generic )
 
 -- |'Semigroup' with a 'zero' element. It’s important to understand that the
 -- standard 'Semigroup' types – i.e. 'Maybe' and so on – are already biased,
@@ -20,7 +32,7 @@
 --
 -- Should satisfies the following laws:
 --
--- ==== Annhilation
+-- ==== Annihilation
 --
 -- @ a '<>' 'zero' = 'zero' '<>' a = 'zero' @
 --
@@ -41,35 +53,22 @@
 instance Zero () where
   zero = ()
 
--- |'Zero' under multiplication.
-newtype Product a = Product { getProduct :: a }
-  deriving (Bounded,Eq,Generic,Num,Ord,Read,Show)
-
-instance (Num a) => Semigroup (Product a) where
-  Product a <> Product b = Product $ a * b
-
 instance (Num a) => Zero (Product a) where
   zero = Product 0
 
--- |'Zero' under boolean logical or.
-newtype Any = Any { getAny :: Bool } deriving (Bounded,Eq,Generic,Ord,Read,Show)
-
-instance Semigroup Any where
-  Any a <> Any b = Any $ a || b
-
 instance Zero Any where
   zero = Any True
 
--- |'Zero' under boolean logical and.
-newtype All = All { getAll :: Bool} deriving (Bounded,Eq,Generic,Ord,Read,Show)
-
-instance Semigroup All where
-  All a <> All b = All $ a && b
-
 instance Zero All where
   zero = All False
 
 -- |'Zero' for 'Maybe'.
+--
+-- Called 'Success' because of the absorbing law:
+--
+-- @
+--   'Success' ('Just' a) '<>' 'Success' 'Nothing' = 'Nothing'
+-- @
 newtype Success a = Success { getSuccess :: Maybe a }
   deriving (Applicative,Eq,Foldable,Functor,Monad,MonadFix,Ord,Traversable,Read,Show)
 
diff --git a/zero.cabal b/zero.cabal
--- a/zero.cabal
+++ b/zero.cabal
@@ -1,5 +1,5 @@
 name:                zero
-version:             0.1.1
+version:             0.1.2
 synopsis:            Semigroups with absorption
 description:         'Monoid' is a 'Semigroup' glued with a neutral element
                      called 'mempty'. In the same idea, 'Zero' is a 'Semigroup'
