diff --git a/data-serializer.cabal b/data-serializer.cabal
--- a/data-serializer.cabal
+++ b/data-serializer.cabal
@@ -1,5 +1,5 @@
 Name: data-serializer
-Version: 0.3
+Version: 0.3.2
 Category: Data
 Stability: experimental
 Synopsis: Common API for serialization libraries
@@ -20,7 +20,7 @@
 Extra-Source-Files:
   README.md
 
-Tested-With: GHC==7.10.3, GHC==8.0.1
+Tested-With: GHC==7.10.3, GHC==8.0.2, GHC==8.2.2
 
 Cabal-Version: >= 1.10.0
 Build-Type: Simple
@@ -38,6 +38,7 @@
                , cereal >= 0.4.1
                , data-endian >= 0.1.1
                , parsers >= 0.12.3
+               , split >= 0.2
   Hs-Source-Dirs: src
   GHC-Options: -Wall
   Exposed-Modules:
diff --git a/src/Data/Deserializer.hs b/src/Data/Deserializer.hs
--- a/src/Data/Deserializer.hs
+++ b/src/Data/Deserializer.hs
@@ -48,12 +48,30 @@
   , BigEndianDeserializer(..)
   , deserializeIn
   , deserializeH
+  -- ** Default deserializer
+  , Deserialized(..)
+  , isDeserialized
+  , isMalformed
+  , maybeDeserialized
+  , defaultDeserializer
   -- * Deserializable types
   , Deserializable(..)
   , getIn
   , getL
   , getB
   , getH
+  , deserializeBytes
+  , deserializeBytesAs
+  , deserializeByteString
+  , deserializeByteStringAs
+  , deserializeLazyByteString
+  , deserializeLazyByteStringAs
+  , fromBytes
+  , fromBytesAs
+  , fromByteString
+  , fromByteStringAs
+  , fromLazyByteString
+  , fromLazyByteStringAs
   , RestDeserializable(..)
   ) where
 
@@ -74,6 +92,7 @@
 import qualified Data.Binary.Get as B
 import qualified Data.Binary.Get.Internal as B
 import qualified Data.Serialize.Get as S
+import Data.List.Split (splitOn)
 import Text.Parser.Combinators
 import Text.Parser.LookAhead
 import Control.Applicative (Applicative(..), Alternative,
@@ -624,6 +643,36 @@
 deserializeH = deserializeL
 #endif
 
+-- | Deserialization result.
+data Deserialized α = Deserialized α
+                    | Malformed [String] String
+
+-- | Map 'Deserialized' to 'True' and 'Malformed' to 'False'.
+isDeserialized ∷ Deserialized α → Bool
+isDeserialized (Deserialized _) = True
+isDeserialized (Malformed _ _)  = False
+
+-- | Map 'Deserialized' to 'False' and 'Malformed' to 'True'.
+isMalformed ∷ Deserialized α → Bool
+isMalformed (Deserialized _) = False
+isMalformed (Malformed _ _)  = True
+
+-- | Map 'Deserialized' values to 'Just' and 'Malformed' to 'Nothing'.
+maybeDeserialized ∷ Deserialized α → Maybe α
+maybeDeserialized (Deserialized a) = Just a
+maybeDeserialized (Malformed _ _)  = Nothing
+
+-- | Deserialize a 'LBS.ByteString' via the default deserializer.
+defaultDeserializer ∷ (∀ μ . Deserializer μ ⇒ μ α) → LBS.ByteString
+                    → Deserialized α
+defaultDeserializer m i = case B.runGetOrFail (binaryDeserializer m) i of
+  Left (_, _, e) → case splitOn "\n" e of
+    []  → Malformed [] e
+    [_] → Malformed [] e
+    es  → Malformed (init es) (last es)
+  Right (_, _, a) →
+    Deserialized a
+
 -- | Deserializable type. 'get' must not rely on 'eof'.
 class Deserializable α where
   get ∷ Deserializer μ ⇒ μ α
@@ -727,6 +776,74 @@
 getH = getL
 #endif
 {-# INLINE getH #-}
+
+-- | Deserialize a value of type @α@ from a list of bytes via
+-- the 'defaultDeserializer'.
+deserializeBytes ∷ Deserializable α ⇒ [Word8] → Deserialized α
+deserializeBytes = defaultDeserializer get . LBS.pack
+{-# INLINE deserializeBytes #-}
+
+-- | Provide a hint for the type system when using 'deserializeBytes'.
+deserializeBytesAs ∷ Deserializable α ⇒ p α → [Word8] → Deserialized α
+deserializeBytesAs _ = deserializeBytes
+{-# INLINE deserializeBytesAs #-}
+
+-- | Deserialize a value of type @α@ from a 'BS.ByteString' via
+-- the 'defaultDeserializer'.
+deserializeByteString ∷ Deserializable α
+                      ⇒ BS.ByteString → Deserialized α
+deserializeByteString = defaultDeserializer get . LBS.fromStrict
+{-# INLINE deserializeByteString #-}
+
+-- | Provide a hint for the type system when using 'deserializeByteString'.
+deserializeByteStringAs ∷ Deserializable α
+                        ⇒ p α → BS.ByteString → Deserialized α
+deserializeByteStringAs _ = deserializeByteString
+{-# INLINE deserializeByteStringAs #-}
+
+-- | Deserialize a value of type @α@ from a 'LBS.ByteString' via
+-- the 'defaultDeserializer'.
+deserializeLazyByteString ∷ Deserializable α
+                          ⇒ LBS.ByteString → Deserialized α
+deserializeLazyByteString = defaultDeserializer get
+{-# INLINE deserializeLazyByteString #-}
+
+-- | Provide a hint for the type system when using
+-- 'deserializeLazyByteString'.
+deserializeLazyByteStringAs ∷ Deserializable α
+                            ⇒ p α → LBS.ByteString → Deserialized α
+deserializeLazyByteStringAs _ = deserializeLazyByteString
+{-# INLINE deserializeLazyByteStringAs #-}
+
+-- | A shorthand for @'maybeDeserialized' . 'deserializeBytes'@.
+fromBytes ∷ Deserializable α ⇒ [Word8] → Maybe α
+fromBytes = maybeDeserialized . deserializeBytes
+{-# INLINE fromBytes #-}
+
+-- | Provide a hint for the type system when using 'fromBytes'
+fromBytesAs ∷ Deserializable α ⇒ p α → [Word8] → Maybe α
+fromBytesAs _ = fromBytes
+{-# INLINE fromBytesAs #-}
+
+-- | A shorthand for @'maybeDeserialized' . 'deserializeByteString'@.
+fromByteString ∷ Deserializable α ⇒ BS.ByteString → Maybe α
+fromByteString = maybeDeserialized . deserializeByteString
+{-# INLINE fromByteString #-}
+
+-- | Provide a hint for the type system when using 'fromByteString'
+fromByteStringAs ∷ Deserializable α ⇒ p α → BS.ByteString → Maybe α
+fromByteStringAs _ = fromByteString
+{-# INLINE fromByteStringAs #-}
+
+-- | A shorthand for @'maybeDeserialized' . 'deserializeLazyByteString'@.
+fromLazyByteString ∷ Deserializable α ⇒ LBS.ByteString → Maybe α
+fromLazyByteString = maybeDeserialized . deserializeLazyByteString
+{-# INLINE fromLazyByteString #-}
+
+-- | Provide a hint for the type system when using 'fromLazyByteString'
+fromLazyByteStringAs ∷ Deserializable α ⇒ p α → LBS.ByteString → Maybe α
+fromLazyByteStringAs _ = fromLazyByteString
+{-# INLINE fromLazyByteStringAs #-}
 
 -- | Deserializable type. 'getRest' must consume all the remaining input
 --   or fail.
diff --git a/src/Data/Serializer.hs b/src/Data/Serializer.hs
--- a/src/Data/Serializer.hs
+++ b/src/Data/Serializer.hs
@@ -12,6 +12,9 @@
   (
   -- * Serialization monoid
     Serializer(..)
+  , buildBytes
+  , buildByteString
+  , buildLazyByteString
   , BinarySerializer(..)
   , CerealSerializer(..)
   -- ** Binary words serialization
@@ -50,6 +53,9 @@
   , putL
   , putB
   , putH
+  , toBytes
+  , toByteString
+  , toLazyByteString
   , SizedSerializable(..)
   , RestSerializable(..)
   ) where
@@ -176,6 +182,20 @@
   builder = id
   {-# INLINE builder #-}
 
+-- | A shorthand for @"LBS.unpack' . 'BB.toLazyByteString'@.
+buildBytes ∷ BB.Builder → [Word8]
+buildBytes = LBS.unpack . BB.toLazyByteString
+
+-- | A shorthand for @'LBS.toStrict' . 'BB.toLazyByteString'@.
+buildByteString ∷ BB.Builder → BS.ByteString
+buildByteString = LBS.toStrict . BB.toLazyByteString
+{-# INLINE buildByteString #-}
+
+-- | An alias for @'BB.toLazyByteString'@.
+buildLazyByteString ∷ BB.Builder → LBS.ByteString
+buildLazyByteString = BB.toLazyByteString
+{-# INLINE buildLazyByteString #-}
+
 #if MIN_VERSION_base(4,9,0) && MIN_VERSION_binary(0,8,3)
 instance Serializer B.Put where
   word8 = B.putWord8
@@ -656,6 +676,21 @@
 putH ∷ (Serializer s, Serializable α) ⇒ α → s
 putH a = serializeH (put a)
 {-# INLINE putH #-}
+
+-- | A shorthand for @'buildBytes' . 'put'@.
+toBytes ∷ Serializable α ⇒ α → [Word8]
+toBytes = buildBytes . put
+{-# INLINE toBytes #-}
+
+-- | A shorthand for @'buildByteString' . 'put'@.
+toByteString ∷ Serializable α ⇒ α → BS.ByteString
+toByteString = buildByteString . put
+{-# INLINE toByteString #-}
+
+-- | A shorthand for @'buildLazyByteString' . 'put'@.
+toLazyByteString ∷ Serializable α ⇒ α → LBS.ByteString
+toLazyByteString = BB.toLazyByteString . put
+{-# INLINE toLazyByteString #-}
 
 -- | Types with fixed serialized size.
 class Serializable α ⇒ SizedSerializable α where
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -11,7 +11,6 @@
 import Data.Either (isLeft, isRight)
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as LBS
-import qualified Data.ByteString.Builder as BB
 import qualified Data.Binary.Put as B
 import qualified Data.Binary.Get as B
 import qualified Data.Serialize.Put as C
@@ -22,7 +21,6 @@
 import qualified Data.Deserializer as D
 import Control.Applicative ((<|>))
 
-byteStringBuilder = LBS.unpack . BB.toLazyByteString
 binaryBuilder = LBS.unpack . B.runPut . S.binarySerializer
 cerealBuilder = LBS.unpack . C.runPutLazy . S.cerealSerializer
 
@@ -69,7 +67,7 @@
 main = defaultMain
      $ testGroup "Tests"
          [ testGroup "Serializers"
-             [ serializerTests "Builder" byteStringBuilder
+             [ serializerTests "Builder" S.buildBytes
              , serializerTests "Binary.Put" binaryBuilder
              , serializerTests "Cereal.Put" cerealBuilder
              ]
