diff --git a/demo/Main.hs b/demo/Main.hs
--- a/demo/Main.hs
+++ b/demo/Main.hs
@@ -4,15 +4,16 @@
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 
 module Main where
 
 import Domain
 import DomainOptics
-import Optics
 import Prelude
 
+main :: IO ()
 main =
   return ()
 
diff --git a/domain-optics.cabal b/domain-optics.cabal
--- a/domain-optics.cabal
+++ b/domain-optics.cabal
@@ -1,48 +1,87 @@
 cabal-version: 3.0
-
-name: domain-optics
-version: 0.1.0.3
-synopsis: Integration of domain with optics
-homepage: https://github.com/nikita-volkov/domain-optics
-bug-reports: https://github.com/nikita-volkov/domain-optics/issues
-author: Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright: (c) 2020 Nikita Volkov
-license: MIT
-license-file: LICENSE
-build-type: Simple
+name:          domain-optics
+version:       0.1.0.4
+synopsis:      Integration of domain with optics
+homepage:      https://github.com/nikita-volkov/domain-optics
+bug-reports:   https://github.com/nikita-volkov/domain-optics/issues
+author:        Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer:    Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright:     (c) 2020 Nikita Volkov
+license:       MIT
+license-file:  LICENSE
+build-type:    Simple
 
 source-repository head
-  type: git
+  type:     git
   location: git://github.com/nikita-volkov/domain-optics.git
 
 library
-  hs-source-dirs: library
-  default-extensions: BangPatterns, BlockArguments, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DerivingVia, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, InstanceSigs, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedLabels, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, StrictData, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language: Haskell2010
-  exposed-modules:
-    DomainOptics
+  hs-source-dirs:     library
+  default-extensions:
+    NoImplicitPrelude
+    NoMonomorphismRestriction
+    BangPatterns
+    BlockArguments
+    ConstraintKinds
+    DataKinds
+    DefaultSignatures
+    DeriveDataTypeable
+    DeriveFoldable
+    DeriveFunctor
+    DeriveGeneric
+    DeriveTraversable
+    DerivingVia
+    EmptyDataDecls
+    FlexibleContexts
+    FlexibleInstances
+    FunctionalDependencies
+    GADTs
+    GeneralizedNewtypeDeriving
+    InstanceSigs
+    LambdaCase
+    LiberalTypeSynonyms
+    MagicHash
+    MultiParamTypeClasses
+    MultiWayIf
+    OverloadedLabels
+    OverloadedStrings
+    ParallelListComp
+    PatternGuards
+    QuasiQuotes
+    RankNTypes
+    RecordWildCards
+    ScopedTypeVariables
+    StandaloneDeriving
+    StrictData
+    TemplateHaskell
+    TupleSections
+    TypeApplications
+    TypeFamilies
+    TypeOperators
+    UnboxedTuples
+
+  default-language:   Haskell2010
+  exposed-modules:    DomainOptics
   other-modules:
     DomainOptics.InstanceDecs
     DomainOptics.Prelude
     DomainOptics.Util.OpticsTH
+
   build-depends:
-    base >=4.12 && <5,
-    domain-core >=0.1.0.2 && <0.2,
-    optics-core >=0.3.0.1 && <0.5,
-    text >=1.2 && <3,
-    template-haskell >=2.14 && <3,
-    template-haskell-compat-v0208 >=0.1.5 && <0.2,
-    th-lego >=0.2.1 && <0.4,
-    unordered-containers >=0.2.10 && <0.3
+    , base >=4.12 && <5
+    , domain-core >=0.1.0.2 && <0.2
+    , optics-core >=0.3.0.1 && <0.5
+    , template-haskell >=2.14 && <3
+    , template-haskell-compat-v0208 >=0.1.5 && <0.2
+    , text >=1.2 && <3
+    , th-lego >=0.2.1 && <0.4
 
 test-suite demo
-  type: exitcode-stdio-1.0
-  hs-source-dirs: demo
-  main-is: Main.hs
+  type:             exitcode-stdio-1.0
+  hs-source-dirs:   demo
+  main-is:          Main.hs
   default-language: Haskell2010
   build-depends:
-    domain,
-    domain-optics,
-    optics,
-    rerebase >=1.9 && <2
+    , domain
+    , domain-optics
+    , rerebase >=1.9 && <2
diff --git a/library/DomainOptics.hs b/library/DomainOptics.hs
--- a/library/DomainOptics.hs
+++ b/library/DomainOptics.hs
@@ -2,12 +2,12 @@
 
 import qualified DomainCore.Deriver as Deriver
 import qualified DomainOptics.InstanceDecs as InstanceDecs
-import DomainOptics.Prelude
 
 -- |
 -- Generates 'LabelOptic' instances for enums, products and sums,
 -- automatically choosing the appropriate optic type.
 --
 -- Requires to have the @UndecidableInstances@ extension enabled.
+labelOpticDeriver :: Deriver.Deriver
 labelOpticDeriver =
   Deriver.effectless InstanceDecs.labelOptic
diff --git a/library/DomainOptics/InstanceDecs.hs b/library/DomainOptics/InstanceDecs.hs
--- a/library/DomainOptics/InstanceDecs.hs
+++ b/library/DomainOptics/InstanceDecs.hs
@@ -7,6 +7,7 @@
 import Language.Haskell.TH.Syntax
 import THLego.Helpers
 
+labelOptic :: Model.TypeDec -> [Dec]
 labelOptic (Model.TypeDec typeName typeDef) =
   case typeDef of
     Model.ProductTypeDef members ->
diff --git a/library/DomainOptics/Prelude.hs b/library/DomainOptics/Prelude.hs
--- a/library/DomainOptics/Prelude.hs
+++ b/library/DomainOptics/Prelude.hs
@@ -26,7 +26,7 @@
 import Data.Fixed as Exports
 import Data.Foldable as Exports hiding (toList)
 import Data.Function as Exports hiding (id, (.))
-import Data.Functor as Exports
+import Data.Functor as Exports hiding (unzip)
 import Data.Functor.Compose as Exports
 import Data.Functor.Contravariant as Exports
 import Data.IORef as Exports
@@ -67,12 +67,10 @@
 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, (%), (.))
+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, (.))
 
-showAsText :: Show a => a -> Text
+showAsText :: (Show a) => a -> Text
 showAsText = show >>> fromString
diff --git a/library/DomainOptics/Util/OpticsTH.hs b/library/DomainOptics/Util/OpticsTH.hs
--- a/library/DomainOptics/Util/OpticsTH.hs
+++ b/library/DomainOptics/Util/OpticsTH.hs
@@ -2,7 +2,6 @@
 -- TH utils for optics.
 module DomainOptics.Util.OpticsTH where
 
-import qualified Data.Text as Text
 import DomainOptics.Prelude
 import Language.Haskell.TH
 import qualified Optics.Core as Optics
@@ -37,7 +36,7 @@
         [VarP aName]
         ( CaseE
             (VarE aName)
-            [ Match (Compat.conp conName [VarP bName]) (NormalB (AppE (ConE 'Just) (VarE bName))) [],
+            [ Match (Compat.conP conName [VarP bName]) (NormalB (AppE (ConE 'Just) (VarE bName))) [],
               Match WildP (NormalB (ConE 'Nothing)) []
             ]
         )
@@ -62,7 +61,7 @@
         [VarP aName]
         ( CaseE
             (VarE aName)
-            [ Match (Compat.conp conName []) (NormalB (ConE 'True)) [],
+            [ Match (Compat.conP conName []) (NormalB (ConE 'True)) [],
               Match WildP (NormalB (ConE 'False)) []
             ]
         )
