diff --git a/binary-ext.cabal b/binary-ext.cabal
--- a/binary-ext.cabal
+++ b/binary-ext.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2b14ea0ba0ef4c6bc5bea0c2bf4b212481d986cb9267ece31ab81e2b88c012b2
+-- hash: adceab08b9d69285d6c3b663ac9de2e05f12135642f1815b44ac5933ec0db13d
 
 name:           binary-ext
-version:        2.0.1
+version:        2.0.2
 synopsis:       An alternate with strong-typed errors for `Data.Binary.Get` monad from `binary` package.
 description:    An alternate with strong-typed errors for `Data.Binary.Get` monad from `binary` package.
 category:       Data, Parsing
@@ -45,7 +45,7 @@
   ghc-options: -fmax-pmcheck-iterations=100000000 -Wall -fno-warn-unused-imports -fprint-potential-instances -fsimpl-tick-factor=110
   build-depends:
       attoparsec
-    , base >=4.7 && <5
+    , base >=4.11 && <5
     , binary
     , bytestring
     , conduit >=1.3.0
@@ -79,7 +79,7 @@
   build-depends:
       HUnit
     , attoparsec
-    , base >=4.7 && <5
+    , base >=4.11 && <5
     , binary
     , binary-ext
     , bytestring
diff --git a/src/Control/Monad/Error/Map.hs b/src/Control/Monad/Error/Map.hs
--- a/src/Control/Monad/Error/Map.hs
+++ b/src/Control/Monad/Error/Map.hs
@@ -13,6 +13,24 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 --
+-- | This module provides generic functions set useful for errortype-parameterized monads and monad transformers,
+-- such as 'Data.Conduit.Parsers.Binary.Get.Get'.
+-- Example:
+--
+-- > pSign :: Parser (Maybe Char) Bool
+-- > pSign = do
+-- >   c <- pChar ?>> return Nothing
+-- >   case c of
+-- >     '+' -> return False
+-- >     '-' -> return True
+-- >     x -> throwError (Just x)
+-- >
+-- > pSignedNumber :: Parser String Int
+-- > pSignedNumber = do
+-- >   is_negative <- fromMaybe False <$> option'' pSign
+-- >   value <- foldl1 (\ !a !b -> a * 10 + b) <$> many1'' pDigit ?>> return "digit or sign expected"
+-- >   return $ if is_negative then -value else value
+
 
 module Control.Monad.Error.Map
   ( MonadMapError (..)
diff --git a/src/Data/Conduit/Parsers/Binary/Get.hs b/src/Data/Conduit/Parsers/Binary/Get.hs
--- a/src/Data/Conduit/Parsers/Binary/Get.hs
+++ b/src/Data/Conduit/Parsers/Binary/Get.hs
@@ -78,7 +78,7 @@
 import qualified Data.ByteString as SB hiding (ByteString, head, last, init, tail)
 import Data.ByteString.Lazy (ByteString)
 import qualified Data.ByteString.Lazy as B hiding (ByteString, head, last, init, tail)
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import Data.Int
 import Data.Maybe
 import Data.Semigroup hiding (Option)
@@ -93,7 +93,7 @@
 
 instance (DecodingState s, DecodingToken s ~ S.ByteString, DecodingElemsRead s) => DefaultDecodingState s where
 
--- | The shortening of 'GetT' for the most common use case.
+-- | The shortening of 'GetT' for the most common use case of binary deserialization.
 type Get e a = forall s o m. (DefaultDecodingState s, Monad m) => GetT s S.ByteString o e m a
 
 -- | Run a decoder presented as a 'Get' monad.
diff --git a/src/Data/Conduit/Parsers/Binary/Put.hs b/src/Data/Conduit/Parsers/Binary/Put.hs
--- a/src/Data/Conduit/Parsers/Binary/Put.hs
+++ b/src/Data/Conduit/Parsers/Binary/Put.hs
@@ -14,8 +14,8 @@
 -- limitations under the License.
 --
 
--- | Despite binary's 'S.Put' is fully-functional construction (unlike 'S.Get'),
--- we decided to provide this module for symmetry with 'Data.Binary.Conduit.Get'.
+-- | Despite binary's 'S.Put' is fully-functional construction (unlike 'Data.Binary.Get.Get'),
+-- we decided to provide this module for symmetry with 'Data.Conduit.Parsers.Binary.Get'.
 
 module Data.Conduit.Parsers.Binary.Put
   ( PutM
@@ -67,7 +67,7 @@
 import qualified Data.ByteString.Lazy as B hiding (ByteString, head, last, init, tail)
 import Data.ByteString.Short (ShortByteString)
 import qualified Data.ByteString.Short as HB hiding (ShortByteString)
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import Data.Int
 import Data.Word
 import Data.Conduit.Parsers.Binary
@@ -78,7 +78,7 @@
 
 instance (EncodingState s, EncodingToken s ~ Word64, EncodingBytesWrote s) => DefaultEncodingState s where
 
--- | The shortening of 'PutM' for the most common use case.
+-- | The shortening of 'PutM' for the most common use case of binary serialization.
 type Put = forall s i m. (DefaultEncodingState s, Monad m) => PutM s i S.ByteString m ()
 
 -- | Run an encoder presented as a 'Put' monad.
@@ -88,7 +88,8 @@
 {-# INLINE runPut #-}
 
 -- | Get the total number of bytes wrote to this point.
--- Can be used with 'mfix' to result bytes count prediction:
+-- Can be used with 'Control.Monad.Fix.mfix' to result bytes count prediction:
+--
 -- > putWithSize :: (DefaultEncodingState s, Monad m) => PutM s i S.ByteString m () -> PutM s i S.ByteString m ()
 -- > putWithSize !p = void $ mfix $ \size -> do
 -- >   putWord64le size
diff --git a/src/Data/Conduit/Parsers/GetC.hs b/src/Data/Conduit/Parsers/GetC.hs
--- a/src/Data/Conduit/Parsers/GetC.hs
+++ b/src/Data/Conduit/Parsers/GetC.hs
@@ -78,7 +78,7 @@
 import qualified Control.Monad.Trans.State.Lazy as L
 import Control.Monad.Trans.Writer.Strict
 import qualified Control.Monad.Trans.Writer.Lazy as L
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import Data.Conduit.Lift
 import Data.Maybe hiding (fromJust)
 
diff --git a/src/Data/Conduit/Parsers/PutS.hs b/src/Data/Conduit/Parsers/PutS.hs
--- a/src/Data/Conduit/Parsers/PutS.hs
+++ b/src/Data/Conduit/Parsers/PutS.hs
@@ -32,8 +32,7 @@
 
 import Control.Monad.Fix
 import Control.Monad.Trans.State.Strict
-import Data.Conduit
-import Data.Semigroup
+import Data.Conduit hiding (ConduitM)
 import Data.String
 import qualified Data.Text as S (Text)
 
@@ -84,7 +83,7 @@
   a <> b = a >> b
   {-# INLINE (<>) #-}
 
--- | A 'ConduitT' with wrappers supposed to a binary serialization.
+-- | A 'ConduitT' with wrappers supposed to a binary or text serialization.
 type PutM s i o m a = PutS s (ConduitT i o m) a
 
 instance (EncodingState s, EncodingToken s ~ (), Monad m) => IsString (PutM s i S.Text m ()) where
diff --git a/src/Data/Conduit/Parsers/Text/Gen.hs b/src/Data/Conduit/Parsers/Text/Gen.hs
--- a/src/Data/Conduit/Parsers/Text/Gen.hs
+++ b/src/Data/Conduit/Parsers/Text/Gen.hs
@@ -31,7 +31,7 @@
 
 import Data.Bits
 import Data.Char
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Text as S (Text)
 import qualified Data.Text as ST hiding (Text, head, last, tail, init)
 import Data.Text.Lazy (Text)
@@ -43,7 +43,7 @@
 
 instance (EncodingState s, EncodingToken s ~ ()) => DefaultTextGenState s where
 
--- | The shortening of 'PutM' for the most common use case.
+-- | The shortening of 'PutM' for the most common use case of text serialization.
 type TextGen = forall s i m. (DefaultTextGenState s, Monad m) => PutM s i S.Text m ()
 
 -- | Run an encoder presented as a 'PutM' monad.
diff --git a/src/Data/Conduit/Parsers/Text/Parser.hs b/src/Data/Conduit/Parsers/Text/Parser.hs
--- a/src/Data/Conduit/Parsers/Text/Parser.hs
+++ b/src/Data/Conduit/Parsers/Text/Parser.hs
@@ -14,16 +14,6 @@
 -- limitations under the License.
 --
 
--- | At the first look, Data.Binary.Conduit.Get module is very similar with Data.Binary.Get.
--- The main differences between them are the following.
--- While the 'S.Get' from binary is a very custom monad,
--- the local 'Get' is 'ConduitT', which leads to easy integration in complicated format parsing.
--- The Data.Binary.Get module does not have a function to create custom 'S.Get' monad,
--- this module provides 'getC'.
--- Unlike 'isolate' from binary, local 'isolate' does not "cut" bytes counter.
--- While the binary's 'S.Get' is 'MonadFail', which leads to very ugly errors handling
--- in complicated cases, local 'Get' is 'MonadError'.
-
 module Data.Conduit.Parsers.Text.Parser
   ( MonadMapError (..)
   , (?=>>)
@@ -101,7 +91,7 @@
 import qualified Data.Attoparsec.Text as Tp hiding (parse, parseOnly, Parser, Result, IResult, Done, Partial, Fail, inClass, notInClass, isEndOfLine, isHorizontalSpace)
 import Data.Bits
 import Data.Char
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Conduit.Combinators as N
 import Data.List.NonEmpty hiding (take, takeWhile)
 import Data.NonNull hiding (head)
@@ -120,7 +110,7 @@
 
 instance (DecodingState s, DecodingToken s ~ S.Text, DecodingTextRead s) => DefaultParsingState s where
 
--- | The shortening of 'GetT' for the most common use case.
+-- | The shortening of 'GetT' for the most common use case of text deserialization.
 type Parser e a = forall s o m. (DefaultParsingState s, Monad m) => GetT s S.Text o e m a
 
 -- | Run a decoder presented as a 'Get' monad.
diff --git a/src/Data/Conduit/Parsers/Text/TextOffset.hs b/src/Data/Conduit/Parsers/Text/TextOffset.hs
--- a/src/Data/Conduit/Parsers/Text/TextOffset.hs
+++ b/src/Data/Conduit/Parsers/Text/TextOffset.hs
@@ -14,16 +14,6 @@
 -- limitations under the License.
 --
 
--- | At the first look, Data.Binary.Conduit.Get module is very similar with Data.Binary.Get.
--- The main differences between them are the following.
--- While the 'S.Get' from binary is a very custom monad,
--- the local 'Get' is 'ConduitT', which leads to easy integration in complicated format parsing.
--- The Data.Binary.Get module does not have a function to create custom 'S.Get' monad,
--- this module provides 'getC'.
--- Unlike 'isolate' from binary, local 'isolate' does not "cut" bytes counter.
--- While the binary's 'S.Get' is 'MonadFail', which leads to very ugly errors handling
--- in complicated cases, local 'Get' is 'MonadError'.
-
 module Data.Conduit.Parsers.Text.TextOffset
   ( TextOffset (..)
   ) where
diff --git a/test/Data/Conduit/Parsers/Binary/Get/Spec.hs b/test/Data/Conduit/Parsers/Binary/Get/Spec.hs
--- a/test/Data/Conduit/Parsers/Binary/Get/Spec.hs
+++ b/test/Data/Conduit/Parsers/Binary/Get/Spec.hs
@@ -28,7 +28,7 @@
 import qualified Data.ByteString as SB hiding (ByteString, head, last, init, tail)
 import Data.ByteString.Lazy (ByteString)
 import Data.Char
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Conduit.Combinators as N
 import Data.Conduit.Lift
 import Data.Functor.Identity
diff --git a/test/Data/Conduit/Parsers/Binary/Put/Spec.hs b/test/Data/Conduit/Parsers/Binary/Put/Spec.hs
--- a/test/Data/Conduit/Parsers/Binary/Put/Spec.hs
+++ b/test/Data/Conduit/Parsers/Binary/Put/Spec.hs
@@ -24,7 +24,7 @@
 import Control.Monad.Trans.Class
 import Data.Bits
 import qualified Data.ByteString as S (ByteString)
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Conduit.Combinators as N
 import Test.HUnit.Base hiding (Label)
 import Data.Conduit.Parsers.Binary.Get
diff --git a/test/Data/Conduit/Parsers/Text/Gen/Spec.hs b/test/Data/Conduit/Parsers/Text/Gen/Spec.hs
--- a/test/Data/Conduit/Parsers/Text/Gen/Spec.hs
+++ b/test/Data/Conduit/Parsers/Text/Gen/Spec.hs
@@ -18,7 +18,7 @@
   ( tests
   ) where
 
-import Data.Conduit
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Conduit.Combinators as N
 import Data.Functor.Identity
 import qualified Data.Text as S (Text)
diff --git a/test/Data/Conduit/Parsers/Text/Parser/Spec.hs b/test/Data/Conduit/Parsers/Text/Parser/Spec.hs
--- a/test/Data/Conduit/Parsers/Text/Parser/Spec.hs
+++ b/test/Data/Conduit/Parsers/Text/Parser/Spec.hs
@@ -18,9 +18,11 @@
   ( tests
   ) where
 
-import Data.Conduit
+import Control.Monad.Error.Class
+import Data.Conduit hiding (ConduitM)
 import qualified Data.Conduit.Combinators as N
 import Data.Functor.Identity
+import Data.Maybe
 import qualified Data.Text as S (Text)
 import Test.HUnit.Base hiding (Label)
 import Data.Conduit.Parsers.Binary.Get hiding (runGet)
@@ -29,6 +31,7 @@
 tests :: Test
 tests = TestList
   [ TestCase testLinesRead
+  , TestCase testSignedNumber
   ]
 
 testLinesRead :: Assertion
@@ -67,3 +70,25 @@
   , "au\nx"
   , ""
   ]
+
+pSign :: Parser (Maybe Char) Bool
+pSign = do
+  c <- pChar ?>> return Nothing
+  case c of
+    '+' -> return False
+    '-' -> return True
+    x -> throwError (Just x)
+
+pSignedNumber :: Parser String Int
+pSignedNumber = do
+  is_negative <- fromMaybe False <$> option'' pSign
+  value <- foldl1 (\ !a !b -> a * 10 + b) <$> many1'' pDigit ?>> return "digit or sign expected"
+  return $ if is_negative then -value else value
+
+testSignedNumber :: Assertion
+testSignedNumber = do
+  assertEqual "" (Right 145) $ runIdentity $ yield "145" `connect` runParser pSignedNumber
+  assertEqual "" (Right 32) $ runIdentity $ yield "+32" `connect` runParser pSignedNumber
+  assertEqual "" (Right (-7)) $ runIdentity $ yield "-7" `connect` runParser pSignedNumber
+  assertEqual "" (Left "digit or sign expected") $ runIdentity $ yield "abc" `connect` runParser pSignedNumber
+  assertEqual "" (Left "digit or sign expected") $ runIdentity $ yield "-abc" `connect` runParser pSignedNumber
