diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/hasql-cursor-query.cabal b/hasql-cursor-query.cabal
--- a/hasql-cursor-query.cabal
+++ b/hasql-cursor-query.cabal
@@ -1,96 +1,114 @@
-name:
-  hasql-cursor-query
-version:
-  0.4.4.3
-category:
-  Hasql, Database, PostgreSQL, Streaming
-synopsis:
-  A declarative abstraction over PostgreSQL Cursor
-homepage:
-  https://github.com/nikita-volkov/hasql-cursor-query 
-bug-reports:
-  https://github.com/nikita-volkov/hasql-cursor-query/issues 
-author:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright:
-  (c) 2016, Nikita Volkov
-license:
-  MIT
-license-file:
-  LICENSE
-build-type:
-  Simple
-cabal-version:
-  >=1.10
-
+cabal-version: 3.0
+name: hasql-cursor-query
+version: 0.4.5
+category: Hasql, Database, PostgreSQL, Streaming
+synopsis: A declarative abstraction over PostgreSQL Cursor
+homepage: https://github.com/nikita-volkov/hasql-cursor-query
+bug-reports: https://github.com/nikita-volkov/hasql-cursor-query/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2016, Nikita Volkov
+license: MIT
+license-file: LICENSE
 
 source-repository head
-  type:
-    git
-  location:
-    git://github.com/nikita-volkov/hasql-cursor-query.git
+  type: git
+  location: git://github.com/nikita-volkov/hasql-cursor-query.git
 
+common base
+  default-language: Haskell2010
+  default-extensions:
+    Arrows
+    BangPatterns
+    ConstraintKinds
+    DataKinds
+    DefaultSignatures
+    DeriveDataTypeable
+    DeriveFoldable
+    DeriveFunctor
+    DeriveGeneric
+    DeriveTraversable
+    EmptyDataDecls
+    FlexibleContexts
+    FlexibleInstances
+    FunctionalDependencies
+    GADTs
+    GeneralizedNewtypeDeriving
+    LambdaCase
+    LiberalTypeSynonyms
+    MagicHash
+    MultiParamTypeClasses
+    MultiWayIf
+    NoImplicitPrelude
+    NoMonomorphismRestriction
+    OverloadedStrings
+    ParallelListComp
+    PatternGuards
+    QuasiQuotes
+    RankNTypes
+    RecordWildCards
+    ScopedTypeVariables
+    StandaloneDeriving
+    TemplateHaskell
+    TupleSections
+    TypeFamilies
+    TypeOperators
+    UnboxedTuples
 
-library
-  hs-source-dirs:
-    library
+common executable
+  import: base
   ghc-options:
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+    -O2
+    -threaded
+    "-with-rtsopts=-N -I0 -qg"
+
+common test
+  import: base
+  ghc-options:
+    -threaded
+    "-with-rtsopts=-N -I0 -qg"
+
+library
+  import: base
+  hs-source-dirs: library
   other-modules:
-    Hasql.CursorQuery.Private.Prelude
     Hasql.CursorQuery.Private.CursorQuery
-    Hasql.CursorQuery.Private.Decoders
-    Hasql.CursorQuery.Private.Transactions
     Hasql.CursorQuery.Private.CursorTransactions
+    Hasql.CursorQuery.Private.Decoders
+    Hasql.CursorQuery.Private.Prelude
     Hasql.CursorQuery.Private.Sessions
+    Hasql.CursorQuery.Private.Transactions
+
   exposed-modules:
-    Hasql.CursorQuery.Transactions
+    Hasql.CursorQuery
     Hasql.CursorQuery.CursorTransactions
     Hasql.CursorQuery.Sessions
-    Hasql.CursorQuery
-  build-depends:
-    -- database:
-    hasql >= 1.4 && < 1.5,
-    hasql-transaction >= 0.7 && < 0.8,
-    hasql-cursor-transaction >= 0.6 && < 0.7,
-    -- data:
-    bytestring >= 0.10 && < 0.11,
-    -- control:
-    foldl > 1 && < 2,
-    profunctors == 5.*,
-    contravariant >= 1.3 && < 2,
-    -- general:
-    base-prelude >= 1 && < 2,
-    base >= 4.6 && < 5
+    Hasql.CursorQuery.Transactions
 
+  build-depends:
+    base-prelude >=1 && <2,
+    bytestring >=0.10 && <0.14,
+    contravariant >=1.3 && <2,
+    foldl >1 && <2,
+    hasql >=1.6 && <1.7,
+    hasql-cursor-transaction >=0.6 && <0.7,
+    hasql-transaction >=1.1 && <1.2,
+    profunctors >=5 && <6,
 
 test-suite tasty
-  type:
-    exitcode-stdio-1.0
-  hs-source-dirs:
-    tasty
-  main-is:
-    Main.hs
+  import: test
+  type: exitcode-stdio-1.0
+  hs-source-dirs: tasty
+  main-is: Main.hs
   other-modules:
     Main.CursorQueries
-    Main.Statements
     Main.IO
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+    Main.Statements
+
   build-depends:
-    foldl >= 1.2 && < 2,
+    foldl >=1.2 && <2,
     hasql,
     hasql-cursor-query,
-    QuickCheck >=2.8.1 && <3,
-    quickcheck-instances >=0.3.11 && <0.4,
-    rebase < 2,
+    rebase <2,
     tasty >=0.12 && <2,
     tasty-hunit >=0.9 && <0.11,
-    tasty-quickcheck >=0.9 && <0.11
diff --git a/library/Hasql/CursorQuery.hs b/library/Hasql/CursorQuery.hs
--- a/library/Hasql/CursorQuery.hs
+++ b/library/Hasql/CursorQuery.hs
@@ -1,19 +1,17 @@
 -- |
 -- A DSL for declaring queries.
 module Hasql.CursorQuery
-(
-  A.CursorQuery,
-  A.cursorQuery,
-  A.ReducingDecoder,
-  A.reducingDecoder,
-  B.BatchSize,
-  B.batchSize_10,
-  B.batchSize_100,
-  B.batchSize_1000,
-  B.batchSize_10000,
-)
+  ( A.CursorQuery,
+    A.cursorQuery,
+    A.ReducingDecoder,
+    A.reducingDecoder,
+    B.BatchSize,
+    B.batchSize_10,
+    B.batchSize_100,
+    B.batchSize_1000,
+    B.batchSize_10000,
+  )
 where
 
 import qualified Hasql.CursorQuery.Private.CursorQuery as A
 import qualified Hasql.CursorTransaction as B
-
diff --git a/library/Hasql/CursorQuery/CursorTransactions.hs b/library/Hasql/CursorQuery/CursorTransactions.hs
--- a/library/Hasql/CursorQuery/CursorTransactions.hs
+++ b/library/Hasql/CursorQuery/CursorTransactions.hs
@@ -1,7 +1,6 @@
 module Hasql.CursorQuery.CursorTransactions
-(
-  cursorQuery,
-)
+  ( cursorQuery,
+  )
 where
 
 import Hasql.CursorQuery.Private.CursorTransactions
diff --git a/library/Hasql/CursorQuery/Private/CursorQuery.hs b/library/Hasql/CursorQuery/Private/CursorQuery.hs
--- a/library/Hasql/CursorQuery/Private/CursorQuery.hs
+++ b/library/Hasql/CursorQuery/Private/CursorQuery.hs
@@ -1,24 +1,22 @@
-module Hasql.CursorQuery.Private.CursorQuery
-where
+module Hasql.CursorQuery.Private.CursorQuery where
 
-import Hasql.CursorQuery.Private.Prelude
-import qualified Hasql.Encoders as A
-import qualified Hasql.Decoders as B
 import qualified Control.Foldl as D
+import Hasql.CursorQuery.Private.Prelude
 import qualified Hasql.CursorTransaction as H
-
+import qualified Hasql.Decoders as B
+import qualified Hasql.Encoders as A
 
 -- |
 -- A specification of a streaming query.
--- 
+--
 -- Provides an abstraction over Postgres Cursor,
 -- which allows to process result sets of any size in constant memory.
--- 
+--
 -- Essentially it is a parametric query specification extended with a reduction strategy and a batch size,
 -- where reduction strategy determines how to fold the rows into the final result,
 -- and batch size determines how many rows to fetch during each roundtrip to the database.
-data CursorQuery params result =
-  CursorQuery !ByteString !(A.Params params) !(ReducingDecoder result) !H.BatchSize
+data CursorQuery params result
+  = CursorQuery !ByteString !(A.Params params) !(ReducingDecoder result) !H.BatchSize
 
 instance Profunctor CursorQuery where
   dimap fn1 fn2 (CursorQuery template encoder decoder batchSize) =
@@ -35,13 +33,12 @@
 cursorQuery =
   CursorQuery
 
-
 -- |
 -- A specification of how to decode and reduce multiple rows.
--- 
+--
 -- Composable with the Applicative interface.
-data ReducingDecoder reduction =
-  forall row. ReducingDecoder !(B.Row row) !(D.Fold row reduction)
+data ReducingDecoder reduction
+  = forall row. ReducingDecoder !(B.Row row) !(D.Fold row reduction)
 
 instance Functor ReducingDecoder where
   fmap fn (ReducingDecoder rowDecoder rowsFold) =
@@ -66,4 +63,3 @@
 reducingDecoder :: B.Row row -> D.Fold row reduction -> ReducingDecoder reduction
 reducingDecoder =
   ReducingDecoder
-
diff --git a/library/Hasql/CursorQuery/Private/CursorTransactions.hs b/library/Hasql/CursorQuery/Private/CursorTransactions.hs
--- a/library/Hasql/CursorQuery/Private/CursorTransactions.hs
+++ b/library/Hasql/CursorQuery/Private/CursorTransactions.hs
@@ -1,21 +1,18 @@
-module Hasql.CursorQuery.Private.CursorTransactions
-where
+module Hasql.CursorQuery.Private.CursorTransactions where
 
-import Hasql.CursorQuery.Private.Prelude
+import qualified Control.Foldl as D
 import qualified Hasql.CursorQuery.Private.CursorQuery as B
 import qualified Hasql.CursorQuery.Private.Decoders as I
-import qualified Hasql.Decoders as E
-import qualified Hasql.Encoders as F
+import Hasql.CursorQuery.Private.Prelude
 import qualified Hasql.CursorTransaction as G
-import qualified Control.Foldl as D
-
+import qualified Hasql.Decoders as E
 
 -- |
 -- Fetch and fold the data from cursor until it dries out.
 fetchAndFoldCursor :: G.Cursor s -> G.BatchSize -> E.Row row -> D.Fold row result -> G.CursorTransaction s result
 fetchAndFoldCursor cursor batchSize rowDecoder (D.Fold progress enter exit) =
-  fmap exit $
-  fetchAndFoldMore enter
+  fmap exit
+    $ fetchAndFoldMore enter
   where
     fetchAndFoldMore batch =
       do
diff --git a/library/Hasql/CursorQuery/Private/Decoders.hs b/library/Hasql/CursorQuery/Private/Decoders.hs
--- a/library/Hasql/CursorQuery/Private/Decoders.hs
+++ b/library/Hasql/CursorQuery/Private/Decoders.hs
@@ -1,10 +1,8 @@
-module Hasql.CursorQuery.Private.Decoders
-where
+module Hasql.CursorQuery.Private.Decoders where
 
+import qualified Control.Foldl as B
 import Hasql.CursorQuery.Private.Prelude
 import qualified Hasql.Decoders as A
-import qualified Control.Foldl as B
-
 
 fold :: B.Fold a b -> A.Row a -> A.Result b
 fold (B.Fold progress enter exit) rowDecoder =
diff --git a/library/Hasql/CursorQuery/Private/Prelude.hs b/library/Hasql/CursorQuery/Private/Prelude.hs
--- a/library/Hasql/CursorQuery/Private/Prelude.hs
+++ b/library/Hasql/CursorQuery/Private/Prelude.hs
@@ -1,23 +1,9 @@
 module Hasql.CursorQuery.Private.Prelude
-( 
-  module Exports,
-)
+  ( module Exports,
+  )
 where
 
-
--- base-prelude
--------------------------
-import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error)
-
--- profunctors
--------------------------
-import Data.Profunctor.Unsafe as Exports
-
--- contravariant
--------------------------
-import Data.Functor.Contravariant as Exports
-import Data.Functor.Contravariant.Divisible as Exports
-
--- bytestring
--------------------------
+import BasePrelude as Exports hiding (assert, error, isLeft, isRight, left, right)
 import Data.ByteString as Exports (ByteString)
+import Data.Functor.Contravariant.Divisible as Exports
+import Data.Profunctor.Unsafe as Exports
diff --git a/library/Hasql/CursorQuery/Private/Sessions.hs b/library/Hasql/CursorQuery/Private/Sessions.hs
--- a/library/Hasql/CursorQuery/Private/Sessions.hs
+++ b/library/Hasql/CursorQuery/Private/Sessions.hs
@@ -1,16 +1,13 @@
-module Hasql.CursorQuery.Private.Sessions
-where
+module Hasql.CursorQuery.Private.Sessions where
 
-import Hasql.CursorQuery.Private.Prelude
 import qualified Hasql.CursorQuery.Private.CursorQuery as B
 import qualified Hasql.CursorQuery.Private.CursorTransactions as C
 import qualified Hasql.CursorTransaction.Sessions as A
 import qualified Hasql.Session as D
 
-
 -- |
 -- Executes CursorQuery in Session provided the parameters.
--- 
+--
 -- During the execution it establishes a Read transaction with the ReadCommitted isolation level.
 cursorQuery :: params -> B.CursorQuery params result -> D.Session result
 cursorQuery params cursorQuery =
diff --git a/library/Hasql/CursorQuery/Private/Transactions.hs b/library/Hasql/CursorQuery/Private/Transactions.hs
--- a/library/Hasql/CursorQuery/Private/Transactions.hs
+++ b/library/Hasql/CursorQuery/Private/Transactions.hs
@@ -1,12 +1,9 @@
-module Hasql.CursorQuery.Private.Transactions
-where
+module Hasql.CursorQuery.Private.Transactions where
 
-import Hasql.CursorQuery.Private.Prelude
 import qualified Hasql.CursorQuery.Private.CursorQuery as B
 import qualified Hasql.CursorQuery.Private.CursorTransactions as C
-import qualified Hasql.Transaction as A
 import qualified Hasql.CursorTransaction.Transactions as D
-
+import qualified Hasql.Transaction as A
 
 -- |
 -- Executes CursorQuery in Transaction provided the parameters.
diff --git a/library/Hasql/CursorQuery/Sessions.hs b/library/Hasql/CursorQuery/Sessions.hs
--- a/library/Hasql/CursorQuery/Sessions.hs
+++ b/library/Hasql/CursorQuery/Sessions.hs
@@ -1,7 +1,6 @@
 module Hasql.CursorQuery.Sessions
-(
-  cursorQuery,
-)
+  ( cursorQuery,
+  )
 where
 
 import Hasql.CursorQuery.Private.Sessions
diff --git a/library/Hasql/CursorQuery/Transactions.hs b/library/Hasql/CursorQuery/Transactions.hs
--- a/library/Hasql/CursorQuery/Transactions.hs
+++ b/library/Hasql/CursorQuery/Transactions.hs
@@ -1,7 +1,6 @@
 module Hasql.CursorQuery.Transactions
-(
-  cursorQuery,
-)
+  ( cursorQuery,
+  )
 where
 
 import Hasql.CursorQuery.Private.Transactions
diff --git a/tasty/Main.hs b/tasty/Main.hs
--- a/tasty/Main.hs
+++ b/tasty/Main.hs
@@ -1,29 +1,27 @@
 module Main where
 
-import Rebase.Prelude
-import Test.Tasty
-import Test.Tasty.Runners
-import Test.Tasty.HUnit
-import qualified Hasql.Session as A
 import qualified Hasql.CursorQuery.Sessions as C
+import qualified Hasql.Session as A
 import qualified Main.CursorQueries as D
-import qualified Main.Statements as E
 import qualified Main.IO as F
-
+import qualified Main.Statements as E
+import Rebase.Prelude
+import Test.Tasty
+import Test.Tasty.HUnit
+import Test.Tasty.Runners
 
 main :: IO ()
 main =
   defaultMain $
-  localOption (NumThreads 1) $
-  testGroup "All tests"
-  [
-    testCase "Amount" $
-    do
-      (count1, count2) <- F.session ((,) <$> A.statement () E.countPGType <*> C.cursorQuery () D.countPGType)
-      assertEqual (show (count1, count2)) count1 count2
-    ,
-    testCase "Equality" $
-    do
-      (result1, result2) <- F.session ((,) <$> A.statement () E.slectOIDAndTypeName <*> C.cursorQuery () D.slectOIDAndTypeName)
-      assertEqual (show (result1, result2)) result1 result2
-  ]
+    localOption (NumThreads 1) $
+      testGroup
+        "All tests"
+        [ testCase "Amount" $
+            do
+              (count1, count2) <- F.session ((,) <$> A.statement () E.countPGType <*> C.cursorQuery () D.countPGType)
+              assertEqual (show (count1, count2)) count1 count2,
+          testCase "Equality" $
+            do
+              (result1, result2) <- F.session ((,) <$> A.statement () E.slectOIDAndTypeName <*> C.cursorQuery () D.slectOIDAndTypeName)
+              assertEqual (show (result1, result2)) result1 result2
+        ]
diff --git a/tasty/Main/CursorQueries.hs b/tasty/Main/CursorQueries.hs
--- a/tasty/Main/CursorQueries.hs
+++ b/tasty/Main/CursorQueries.hs
@@ -1,11 +1,10 @@
 module Main.CursorQueries where
 
-import Rebase.Prelude
+import qualified Control.Foldl as C
 import Hasql.CursorQuery
-import qualified Hasql.Encoders as A
 import qualified Hasql.Decoders as B
-import qualified Control.Foldl as C
-
+import qualified Hasql.Encoders as A
+import Rebase.Prelude
 
 countPGType :: CursorQuery () Int
 countPGType =
@@ -38,4 +37,3 @@
           (,) <$> (B.column . B.nonNullable) B.int8 <*> (B.column . B.nonNullable) B.text
         fold =
           C.list
-
diff --git a/tasty/Main/IO.hs b/tasty/Main/IO.hs
--- a/tasty/Main/IO.hs
+++ b/tasty/Main/IO.hs
@@ -1,14 +1,13 @@
 module Main.IO where
 
-import Rebase.Prelude
-import qualified Hasql.Session as A
 import qualified Hasql.Connection as B
-
+import qualified Hasql.Session as A
+import Rebase.Prelude
 
 session :: A.Session a -> IO a
 session session =
-  withConnection (A.run session) >>=
-  either (fail . show) (either (fail . show) return)
+  withConnection (A.run session)
+    >>= either (fail . show) (either (fail . show) return)
   where
     withConnection :: (B.Connection -> IO a) -> IO (Either B.ConnectionError a)
     withConnection handler =
@@ -23,7 +22,7 @@
                 host = "localhost"
                 port = 5432
                 user = "postgres"
-                password = ""
+                password = "postgres"
                 database = "postgres"
         use connection =
           lift $ handler connection
diff --git a/tasty/Main/Statements.hs b/tasty/Main/Statements.hs
--- a/tasty/Main/Statements.hs
+++ b/tasty/Main/Statements.hs
@@ -1,10 +1,9 @@
 module Main.Statements where
 
-import Rebase.Prelude
-import Hasql.Statement
-import qualified Hasql.Encoders as A
 import qualified Hasql.Decoders as B
-
+import qualified Hasql.Encoders as A
+import Hasql.Statement
+import Rebase.Prelude
 
 countPGType :: Statement () Int
 countPGType =
@@ -16,7 +15,7 @@
       A.noParams
     decoder =
       (B.singleRow . B.column . B.nonNullable . fmap fromIntegral) B.int8
-      
+
 slectOIDAndTypeName :: Statement () [(Int64, Text)]
 slectOIDAndTypeName =
   Statement sql encoder decoder True
