diff --git a/demo/Main.hs b/demo/Main.hs
--- a/demo/Main.hs
+++ b/demo/Main.hs
@@ -5,7 +5,8 @@
 import qualified Optima
 import Prelude
 
-main = parseOpts >>= print
+main :: IO ()
+main = try @SomeException parseOpts >>= print
   where
     parseOpts =
       Optima.params
@@ -57,4 +58,3 @@
       where
         textParam = Optima.value "Text param" Optima.defaultless Optima.unformatted (Optima.explicitlyParsed Attoparsec.text)
         flag = Optima.flag "Flag type 1"
-        bytesParam = Optima.value "" Optima.defaultless Optima.unformatted (Optima.explicitlyParsed Attoparsec.utf8Bytes)
diff --git a/library/Optima.hs b/library/Optima.hs
--- a/library/Optima.hs
+++ b/library/Optima.hs
@@ -221,7 +221,7 @@
 
 -- |
 -- Lift an implicit lenient Attoparsec parser into value parser.
-implicitlyParsed :: Attoparsec.LenientParser a => Value a
+implicitlyParsed :: (Attoparsec.LenientParser a) => Value a
 implicitlyParsed = Value Attoparsec.lenientParser
 
 -- ** Default
@@ -233,7 +233,7 @@
 
 -- |
 -- Provide a default value with textual representation formed using the implicit Show instance.
-showable :: Show a => a -> Default a
+showable :: (Show a) => a -> Default a
 showable a = SpecifiedDefault a (Text.pack (show a))
 
 -- |
@@ -302,11 +302,11 @@
 paramHelp description format =
   foldMap (Optparse.help . Text.unpack) (renderIfNotEmpty (buildHelp description format))
 
-defaultValue :: Optparse.HasValue f => Default a -> Optparse.Mod f a
+defaultValue :: (Optparse.HasValue f) => Default a -> Optparse.Mod f a
 defaultValue = \case
   SpecifiedDefault a text -> Optparse.value a <> Optparse.showDefaultWith (const (Text.unpack text))
   UnspecifiedDefault -> mempty
 
-longParamName :: Optparse.HasName f => Text -> Optparse.Mod f a
+longParamName :: (Optparse.HasName f) => Text -> Optparse.Mod f a
 longParamName name =
   maybe mempty (Optparse.long . Text.unpack) (validate (not . Text.null) name)
diff --git a/library/Optima/Prelude.hs b/library/Optima/Prelude.hs
--- a/library/Optima/Prelude.hs
+++ b/library/Optima/Prelude.hs
@@ -25,7 +25,7 @@
 import Data.Fixed as Exports
 import Data.Foldable as Exports
 import Data.Function as Exports hiding (id, (.))
-import Data.Functor as Exports
+import Data.Functor as Exports hiding (unzip)
 import Data.Functor.Identity as Exports
 import Data.IORef as Exports
 import Data.Int as Exports
@@ -60,14 +60,12 @@
 import System.Mem as Exports
 import System.Mem.StableName as Exports
 import System.Timeout as Exports
-import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)
-import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec)
 import Text.Printf as Exports (hPrintf, printf)
 import Text.Read as Exports (Read (..), readEither, readMaybe)
 import Unsafe.Coerce as Exports
 import Prelude as Exports hiding (all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.))
 
-validate :: Alternative m => (a -> Bool) -> a -> m a
+validate :: (Alternative m) => (a -> Bool) -> a -> m a
 validate predicate value =
   if predicate value
     then pure value
diff --git a/optima.cabal b/optima.cabal
--- a/optima.cabal
+++ b/optima.cabal
@@ -1,42 +1,86 @@
 cabal-version: 3.0
-
-name: optima
-version: 0.4.0.4
-category: CLI, Parsing, Options
-synopsis: Simple command line interface arguments parser
-homepage: https://github.com/metrix-ai/optima
-bug-reports: https://github.com/metrix-ai/optima/issues
-author: Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer: Metrix.AI Tech Team <tech@metrix.ai>
-copyright: (c) 2018, Metrix.AI
-license: MIT
-license-file: LICENSE
+name:          optima
+version:       0.4.0.5
+category:      CLI, Parsing, Options
+synopsis:      Simple command line interface arguments parser
+homepage:      https://github.com/metrix-ai/optima
+bug-reports:   https://github.com/metrix-ai/optima/issues
+author:        Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer:    Metrix.AI Tech Team <tech@metrix.ai>
+copyright:     (c) 2018, Metrix.AI
+license:       MIT
+license-file:  LICENSE
 
 common language-settings
-  default-extensions: ApplicativeDo, BangPatterns, BinaryLiterals, BlockArguments, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, DerivingVia, DuplicateRecordFields, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, HexFloatLiterals, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, NumericUnderscores, OverloadedLabels, OverloadedStrings, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, StrictData, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UndecidableInstances, ViewPatterns
-  default-language: Haskell2010
+  default-extensions:
+    NoImplicitPrelude
+    NoMonomorphismRestriction
+    ApplicativeDo
+    BangPatterns
+    BinaryLiterals
+    BlockArguments
+    ConstraintKinds
+    DataKinds
+    DefaultSignatures
+    DeriveDataTypeable
+    DeriveFoldable
+    DeriveFunctor
+    DeriveGeneric
+    DeriveTraversable
+    DerivingVia
+    DuplicateRecordFields
+    EmptyDataDecls
+    FlexibleContexts
+    FlexibleInstances
+    FunctionalDependencies
+    GADTs
+    GeneralizedNewtypeDeriving
+    HexFloatLiterals
+    LambdaCase
+    LiberalTypeSynonyms
+    MultiParamTypeClasses
+    MultiWayIf
+    NumericUnderscores
+    OverloadedLabels
+    OverloadedStrings
+    ParallelListComp
+    PatternGuards
+    PatternSynonyms
+    QuasiQuotes
+    RankNTypes
+    RecordWildCards
+    ScopedTypeVariables
+    StandaloneDeriving
+    StrictData
+    TemplateHaskell
+    TupleSections
+    TypeApplications
+    TypeFamilies
+    TypeOperators
+    UndecidableInstances
+    ViewPatterns
 
+  default-language:   Haskell2010
+
 library
-  import: language-settings
-  hs-source-dirs: library
-  exposed-modules:
-    Optima
-  other-modules:
-    Optima.Prelude
+  import:          language-settings
+  hs-source-dirs:  library
+  exposed-modules: Optima
+  other-modules:   Optima.Prelude
   build-depends:
-    attoparsec >=0.13 && <0.15,
-    attoparsec-data >=1.0.5.2 && <1.1,
-    base >=4.9 && <5,
-    optparse-applicative >=0.15 && <0.19,
-    text >=1.2 && <3,
-    text-builder >=0.6 && <0.7
+    , attoparsec >=0.13 && <0.15
+    , attoparsec-data >=1.0.5.2 && <1.1
+    , base >=4.9 && <5
+    , optparse-applicative >=0.15 && <0.19
+    , text >=1.2 && <3
+    , text-builder >=0.6 && <0.7
 
 test-suite demo
-  import: language-settings
-  type: exitcode-stdio-1.0
+  import:         language-settings
+  type:           exitcode-stdio-1.0
   hs-source-dirs: demo
-  main-is: Main.hs
+  main-is:        Main.hs
   build-depends:
-    optima,
-    attoparsec-data ==1.*,
-    rerebase ==1.*
+    , attoparsec-data >=1 && <2
+    , optima
+    , rerebase >=1 && <2
