diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,14 @@
 # Changelog
 All notable changes to this project will be documented in this file.
 
+## [0.8.4.0] 2020-05-03
+### Added
+- Tuple support for `pragma experimental ABIEncoderV2`
+- Fixed dependencies bounds for stackage LTS-15
+
+### Changed
+- Fixed reusing of HTTP request Manager
+
 ## [0.8.3.2] 2019-05-13
 ### Changed
 - Fixed dependencies bounds for stackage distribution
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Alexander Krupenkin (c) 2016-2018
+Copyright Alexander Krupenkin (c) 2016-2020
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 [![Build Status](https://travis-ci.org/airalab/hs-web3.svg?branch=master)](https://travis-ci.org/airalab/hs-web3)
 [![Hackage Matrix](https://matrix.hackage.haskell.org/api/v2/packages/web3/badge)](https://matrix.hackage.haskell.org/package/web3)
 [![Hackage](https://img.shields.io/hackage/v/web3.svg)](http://hackage.haskell.org/package/web3)
-[![LTS-13](http://stackage.org/package/web3/badge/lts-13)](http://stackage.org/lts-13/package/web3)
+[![LTS-14](http://stackage.org/package/web3/badge/lts-14)](http://stackage.org/lts-14/package/web3)
 [![nightly](http://stackage.org/package/web3/badge/nightly)](http://stackage.org/nightly/package/web3)
 [![Code Triagers](https://www.codetriage.com/airalab/hs-web3/badges/users.svg)](https://www.codetriage.com/airalab/hs-web3)
 ![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)
diff --git a/src/Language/Solidity/Abi.hs b/src/Language/Solidity/Abi.hs
--- a/src/Language/Solidity/Abi.hs
+++ b/src/Language/Solidity/Abi.hs
@@ -28,7 +28,8 @@
 
     -- * Solidity type parser
     , SolidityType(..)
-    , parseSolidityType
+    , parseSolidityFunctionArgType
+    , parseSolidityEventArgType
     ) where
 
 import           Control.Monad      (void)
@@ -54,6 +55,8 @@
   -- ^ Argument name
   , funArgType :: Text
   -- ^ Argument type
+  , funArgComponents :: Maybe [FunctionArg]
+  -- ^ Argument components for tuples
   } deriving (Show, Eq, Ord)
 
 $(deriveJSON
@@ -166,15 +169,22 @@
 
 signature (DConstructor inputs) = "(" <> args inputs <> ")"
   where
-    args :: [FunctionArg] -> Text
-    args = T.dropEnd 1 . foldMap (<> ",") . fmap funArgType
+    args [] = ""
+    args [x] = funArgType x
+    args (x:xs) = case funArgComponents x of
+      Nothing -> funArgType x <> "," <> args xs
+      Just cmps -> "(" <> args cmps <> ")," <> args xs
 
 signature (DFallback _) = "()"
 
 signature (DFunction name _ inputs _) = name <> "(" <> args inputs <> ")"
   where
     args :: [FunctionArg] -> Text
-    args = T.dropEnd 1 . foldMap (<> ",") . fmap funArgType
+    args [] = ""
+    args [x] = funArgType x
+    args (x:xs) = case funArgComponents x of
+      Nothing -> funArgType x <> "," <> args xs
+      Just cmps -> "(" <> args cmps <> ")," <> args xs
 
 signature (DEvent name inputs _) = name <> "(" <> args inputs <> ")"
   where
@@ -207,6 +217,7 @@
   | SolidityString
   | SolidityBytesN Int
   | SolidityBytes
+  | SolidityTuple Int [SolidityType]
   | SolidityVector [Int] SolidityType
   | SolidityArray SolidityType
     deriving (Eq, Show)
@@ -280,5 +291,13 @@
            , solidityBasicTypeParser
            ]
 
-parseSolidityType :: Text -> Either ParseError SolidityType
-parseSolidityType = parse solidityTypeParser "Solidity"
+parseSolidityFunctionArgType :: FunctionArg -> Either ParseError SolidityType
+parseSolidityFunctionArgType (FunctionArg _ typ mcmps) = case mcmps of
+  Nothing -> parse solidityTypeParser "Solidity" typ
+  Just cmps -> 
+    SolidityTuple (length cmps) 
+    <$>  mapM parseSolidityFunctionArgType cmps
+
+
+parseSolidityEventArgType :: EventArg -> Either ParseError SolidityType
+parseSolidityEventArgType (EventArg _ typ _) = parse solidityTypeParser "Solidity" typ
diff --git a/src/Network/Ethereum/Account/LocalKey.hs b/src/Network/Ethereum/Account/LocalKey.hs
--- a/src/Network/Ethereum/Account/LocalKey.hs
+++ b/src/Network/Ethereum/Account/LocalKey.hs
@@ -19,6 +19,7 @@
 
 module Network.Ethereum.Account.LocalKey where
 
+import           Control.Monad.Catch               (throwM)
 import           Control.Monad.State.Strict        (get, runStateT)
 import           Control.Monad.Trans               (lift)
 import           Crypto.PubKey.ECC.ECDSA           (PrivateKey)
@@ -40,6 +41,7 @@
 import qualified Network.Ethereum.Api.Eth          as Eth (call, estimateGas,
                                                            getTransactionCount,
                                                            sendRawTransaction)
+import           Network.Ethereum.Api.Provider     (Web3Error (ParserFail))
 import           Network.Ethereum.Api.Types        (Call (..))
 import           Network.Ethereum.Chain            (foundation)
 import           Network.Ethereum.Contract.Method  (selector)
@@ -49,7 +51,8 @@
 data LocalKey = LocalKey
     { localKeyPrivate :: !PrivateKey
     , localKeyChainId :: !Integer
-    } deriving (Eq, Show)
+    }
+    deriving (Eq, Show)
 
 instance Default LocalKey where
     def = LocalKey (importKey empty) foundation
@@ -92,4 +95,4 @@
         res <- lift $ Eth.call params _block
         case decode res of
             Right r -> return r
-            Left e  -> fail e
+            Left e  -> lift $ throwM (ParserFail e)
diff --git a/src/Network/Ethereum/Account/Personal.hs b/src/Network/Ethereum/Account/Personal.hs
--- a/src/Network/Ethereum/Account/Personal.hs
+++ b/src/Network/Ethereum/Account/Personal.hs
@@ -19,6 +19,7 @@
 
 module Network.Ethereum.Account.Personal where
 
+import           Control.Monad.Catch               (throwM)
 import           Control.Monad.State.Strict        (get, runStateT)
 import           Control.Monad.Trans               (lift)
 import qualified Data.ByteArray                    as BA (convert)
@@ -36,14 +37,16 @@
 import qualified Network.Ethereum.Api.Eth          as Eth (call, estimateGas)
 import           Network.Ethereum.Api.Personal     (Passphrase)
 import qualified Network.Ethereum.Api.Personal     as Personal (sendTransaction)
+import           Network.Ethereum.Api.Provider     (Web3Error (ParserFail))
 import           Network.Ethereum.Api.Types        (Call (callData, callFrom, callGas))
 import           Network.Ethereum.Contract.Method  (selector)
 
 -- | Unlockable node managed account params
-data Personal = Personal {
-    personalAddress    :: !Address
-  , personalPassphrase :: !Passphrase
-  } deriving (Eq, Show)
+data Personal = Personal
+    { personalAddress    :: !Address
+    , personalPassphrase :: !Passphrase
+    }
+    deriving (Eq, Show)
 
 instance Default Personal where
     def = Personal def ""
@@ -80,4 +83,4 @@
                 res <- lift $ Eth.call params block
                 case decode res of
                     Right r -> return r
-                    Left e  -> fail e
+                    Left e  -> lift $ throwM (ParserFail e)
diff --git a/src/Network/Ethereum/Api/Provider.hs b/src/Network/Ethereum/Api/Provider.hs
--- a/src/Network/Ethereum/Api/Provider.hs
+++ b/src/Network/Ethereum/Api/Provider.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
 
 -- |
 -- Module      :  Network.Ethereum.Api.Provider
diff --git a/src/Network/Ethereum/Contract/TH.hs b/src/Network/Ethereum/Contract/TH.hs
--- a/src/Network/Ethereum/Contract/TH.hs
+++ b/src/Network/Ethereum/Contract/TH.hs
@@ -74,7 +74,7 @@
                                                    EventArg (..),
                                                    FunctionArg (..),
                                                    SolidityType (..), eventId,
-                                                   methodId, parseSolidityType)
+                                                   methodId, parseSolidityFunctionArgType, parseSolidityEventArgType)
 import           Network.Ethereum.Account.Class   (Account (..))
 import           Network.Ethereum.Api.Types       (DefaultBlock (..),
                                                    Filter (..), TxReceipt)
@@ -118,6 +118,7 @@
     SolidityString      -> conT ''Text
     SolidityBytesN n    -> appT (conT ''BytesN) (numLit n)
     SolidityBytes       -> conT ''Bytes
+    SolidityTuple n as  -> foldl ( \b a -> appT b $ toHSType a ) ( tupleT n ) as
     SolidityVector ns a -> expandVector ns a
     SolidityArray a     -> appT listT $ toHSType a
   where
@@ -130,15 +131,21 @@
           else conT ''ListN `appT` numLit n `appT` expandVector rest a
       _ -> error $ "Impossible Nothing branch in `expandVector`: " ++ show ns ++ " " ++ show a
 
-typeQ :: Text -> TypeQ
-typeQ t = case parseSolidityType t of
+typeFuncQ :: FunctionArg -> TypeQ
+typeFuncQ t = case parseSolidityFunctionArgType t of
   Left e   -> error $ "Unable to parse solidity type: " ++ show e
   Right ty -> toHSType ty
 
+typeEventQ :: EventArg -> TypeQ
+typeEventQ t = case parseSolidityEventArgType t of
+  Left e   -> error $ "Unable to parse solidity type: " ++ show e
+  Right ty -> toHSType ty
+
+
 -- | Function argument to TH type
 funBangType :: FunctionArg -> BangTypeQ
-funBangType (FunctionArg _ typ) =
-    bangType (bang sourceNoUnpack sourceStrict) (typeQ typ)
+funBangType fa =
+    bangType (bang sourceNoUnpack sourceStrict) (typeFuncQ fa)
 
 funWrapper :: Bool
            -- ^ Is constant?
@@ -159,11 +166,11 @@
 
 
     let params  = appsE $ conE dname : fmap varE vars
-        inputT  = fmap (typeQ . funArgType) args
+        inputT  = fmap typeFuncQ args
         outputT = case result of
             Nothing  -> [t|$t $m ()|]
-            Just [x] -> [t|$t $m $(typeQ $ funArgType x)|]
-            Just xs  -> let outs = fmap (typeQ . funArgType) xs
+            Just [x] -> [t|$t $m $(typeFuncQ x)|]
+            Just xs  -> let outs = fmap typeFuncQ xs
                          in  [t|$t $m $(foldl appT (tupleT (length xs)) outs)|]
 
     sequence [
@@ -193,7 +200,7 @@
     , instanceD' nonIndexedName (conT ''Generic) []
     , instanceD' nonIndexedName (conT ''AbiType) [funD' 'isDynamic [] [|const False|]]
     , instanceD' nonIndexedName (conT ''AbiGet) []
-    , dataD' allName (recC allName (map (\(n, a) -> (\(b,t) -> return (n,b,t)) <=< toBang <=< typeQ $ a) allArgs)) derivingD
+    , dataD' allName (recC allName (map (\(n, a) -> (\(b,t) -> return (n,b,t)) <=< toBang <=< typeEventQ $ a) allArgs)) derivingD
     , instanceD' allName (conT ''Generic) []
     , instanceD (cxt [])
         (pure $ ConT ''IndexedEvent `AppT` ConT indexedName `AppT` ConT nonIndexedName `AppT` ConT allName)
@@ -206,13 +213,14 @@
     name = if Char.toLower (T.head uncheckedName) == Char.toUpper (T.head uncheckedName) then "EvT" <> uncheckedName else uncheckedName
     topics    = [Just (T.unpack $ eventId ev)] <> replicate (length indexedArgs) Nothing
     toBang ty = bangType (bang sourceNoUnpack sourceStrict) (return ty)
-    tag (n, ty) = AppT (AppT (ConT ''Tagged) (LitT $ NumTyLit n)) <$> typeQ ty
+    tag (n, ty) = AppT (AppT (ConT ''Tagged) (LitT $ NumTyLit n)) <$> typeEventQ ty
     labeledArgs = zip [1..] inputs
-    indexedArgs = map (\(n, ea) -> (n, eveArgType ea)) . filter (eveArgIndexed . snd) $ labeledArgs
+    indexedArgs = map (\(n, ea) -> (n, ea)) . filter (eveArgIndexed . snd) $ labeledArgs
     indexedName = mkName $ toUpperFirst (T.unpack name) <> "Indexed"
-    nonIndexedArgs = map (\(n, ea) -> (n, eveArgType ea)) . filter (not . eveArgIndexed . snd) $ labeledArgs
+    nonIndexedArgs = map (\(n, ea) -> (n, ea)) . filter (not . eveArgIndexed . snd) $ labeledArgs
     nonIndexedName = mkName $ toUpperFirst (T.unpack name) <> "NonIndexed"
-    allArgs = makeArgs name $ map (\i -> (eveArgName i, eveArgType i)) inputs
+    allArgs :: [(Name, EventArg)]
+    allArgs = makeArgs name $ map (\i -> (eveArgName i, i)) inputs
     allName = mkName $ toUpperFirst (T.unpack name)
     derivingD = [''Show, ''Eq, ''Ord, ''GHC.Generic]
 
@@ -265,11 +273,11 @@
 -- | arg_name -> evArg_name
 -- | _argName -> evArgName
 -- | "" -> evi , for example Transfer(address, address uint256) ~> Transfer {transfer1 :: address, transfer2 :: address, transfer3 :: Integer}
-makeArgs :: Text -> [(Text, Text)] -> [(Name, Text)]
+makeArgs :: Text -> [(Text, EventArg)] -> [(Name, EventArg)]
 makeArgs prefix ns = go 1 ns
   where
     prefixStr = toLowerFirst . T.unpack $ prefix
-    go :: Int -> [(Text, Text)] -> [(Name, Text)]
+    go :: Int -> [(Text, EventArg)] -> [(Name, EventArg)]
     go _ [] = []
     go i ((h, ty) : tail')
         | T.null h  = (mkName $ prefixStr ++ show i, ty) : go (i + 1) tail'
@@ -323,7 +331,7 @@
 -- | Abi to declarations converter
 quoteAbiDec :: String -> DecsQ
 quoteAbiDec str =
-    case str ^? _JSON <|> str ^? key "abi" . _JSON of
+    case str ^? _JSON <|> str ^? key "abi" . _JSON <|> str ^? key "compilerOutput" . key "abi" . _JSON of
         Nothing                 -> fail "Unable to decode contract ABI"
         Just (ContractAbi decs) -> do
             funEvDecs <- concat <$> mapM mkDecl (escape decs)
diff --git a/src/Network/JsonRpc/TinyClient.hs b/src/Network/JsonRpc/TinyClient.hs
--- a/src/Network/JsonRpc/TinyClient.hs
+++ b/src/Network/JsonRpc/TinyClient.hs
@@ -88,8 +88,8 @@
 
 -- | JSON-RPC client state vars.
 data JsonRpcClient = JsonRpcClient
-    { _jsonRpcManager :: Manager    -- ^ HTTP connection manager.
-    , _jsonRpcServer  :: String     -- ^ Remote server URI.
+    { _jsonRpcManager :: !Manager    -- ^ HTTP connection manager.
+    , _jsonRpcServer  :: !String     -- ^ Remote server URI.
     }
 
 $(makeLenses ''JsonRpcClient)
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,5 +1,5 @@
 # Resolver to choose a 'specific' stackage snapshot or a compiler version.
-resolver: lts-13.21
+resolver: lts-15.10
 
 # User packages to be built.
 packages:
@@ -8,6 +8,8 @@
 # Extra package dependencies
 extra-deps:
 - relapse-1.0.0.0@sha256:b89ea23189e07f377be4e2a4deccf3d6ba7f547ed8ad77e27b35d78801efd81c
+- vinyl-0.12.1@sha256:03f5e246fae2434250987bbfe708015dc6e23f60c20739c34738acde1383b96c
+- time-1.8.0.4@sha256:3f6eddf238b828eb4f82683acce1c3afe64784f0d20114239b738c123316c85c
 
 # Dependencies bounds
 pvp-bounds: both
@@ -16,9 +18,5 @@
 nix:
     packages:
     - zlib
-    - boost
-    - jsoncpp
-    - solc
-    - solc.dev
     - haskellPackages.hlint
     - haskellPackages.stylish-haskell
diff --git a/unit/Language/Solidity/Test/AbiSpec.hs b/unit/Language/Solidity/Test/AbiSpec.hs
new file mode 100644
--- /dev/null
+++ b/unit/Language/Solidity/Test/AbiSpec.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Language.Solidity.Test.AbiSpec where
+
+
+import Test.Hspec
+import Data.Either (isLeft)
+import Language.Solidity.Abi
+
+
+spec :: Spec
+spec = do
+  describe "parseSolidityType" $ 
+    describe "tuple type" $ do
+        it "can parses a FunctionArg with tuple type" $ do
+          let maa = FunctionArg  "makerAssetAmount" "uint256" Nothing
+              ma = FunctionArg "makeAddress" "address" Nothing
+              tupleFA = FunctionArg "order" "tuple" (Just [maa, ma])
+              eRes = parseSolidityFunctionArgType tupleFA
+          eRes `shouldBe` Right (SolidityTuple 2 [SolidityUint 256, SolidityAddress])
+        it "fails to parse a FunctionArg with invalid tuple" $ do
+          let tupleFA = FunctionArg "order" "tuple" Nothing
+              eRes = parseSolidityFunctionArgType tupleFA
+          isLeft eRes `shouldBe` True 
+  describe "signature" $ 
+    it "can generate signature for fillOrder" $ do
+      let fillOrderDec = buildFillOrderDec
+          expected = "fillOrder((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint256,bytes)"
+          sig = signature fillOrderDec
+      sig `shouldBe` expected
+  describe "methodId" $ 
+    it "can generate methodId for fillOrder" $ do
+      let fillOrderDec = buildFillOrderDec
+          expected = "0xb4be83d5"
+          mId = methodId fillOrderDec
+      mId `shouldBe` expected
+
+buildFillOrderDec :: Declaration
+buildFillOrderDec = DFunction "fillOrder" False funInputs' funOutputs'
+  where
+    funInputs' = 
+      [ makeTupleFuncArg ("order", "tuple") tupleComponents
+      , makeBasicFuncArg ("takerAssetFillAmount", "uint256")
+      , makeBasicFuncArg ("signature", "bytes")
+      ]
+    tupleComponents = 
+      [ ("makerAddress", "address")           
+      , ("takerAddress", "address")         
+      , ("feeRecipientAddress", "address")    
+      , ("senderAddress", "address")          
+      , ("makerAssetAmount", "uint256")       
+      , ("takerAssetAmount", "uint256")       
+      , ("makerFee", "uint256")               
+      , ("takerFee", "uint256")               
+      , ("expirationTimeSeconds", "uint256")
+      , ("salt", "uint256")                   
+      , ("makerAssetData",   "bytes")
+      , ("takerAssetData",   "bytes")
+      ]
+    funOutputs' = Nothing
+    makeBasicFuncArg (n,t) = 
+      FunctionArg n t Nothing
+    makeTupleFuncArg (n,t) cmps = 
+      FunctionArg n t (Just $ map makeBasicFuncArg cmps)
diff --git a/unit/Network/Ethereum/Contract/Test/THSpec.hs b/unit/Network/Ethereum/Contract/Test/THSpec.hs
new file mode 100644
--- /dev/null
+++ b/unit/Network/Ethereum/Contract/Test/THSpec.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE DataKinds             #-}
+{-# LANGUAGE DeriveGeneric         #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings     #-}
+{-# LANGUAGE QuasiQuotes           #-}
+module Network.Ethereum.Contract.Test.THSpec where
+
+import           Network.Ethereum.Contract.TH
+import           Test.Hspec
+
+-- 0x Exchange Contract that includes Tuples taken from:
+-- https://raw.githubusercontent.com/0xProject/0x-monorepo/%400x/website%400.0.89/packages/contract-artifacts/artifacts/Exchange.json
+[abiFrom|test/contracts/Exchange.json|]
+
+spec :: Spec
+spec =
+  describe "quasi-quoter" $
+    it "can compile contract with tuples" $
+      True `shouldBe` True
diff --git a/web3.cabal b/web3.cabal
--- a/web3.cabal
+++ b/web3.cabal
@@ -1,18 +1,24 @@
-cabal-version: 1.12
-name: web3
-version: 0.8.3.2
-license: BSD3
-license-file: LICENSE
-copyright: (c) Alexander Krupenkin 2016
-maintainer: mail@akru.me
-author: Alexander Krupenkin
-homepage: https://github.com/airalab/hs-web3#readme
-bug-reports: https://github.com/airalab/hs-web3/issues
-synopsis: Ethereum API for Haskell
-description:
-    Web3 is a Haskell client library for Ethereum
-category: Network
-build-type: Simple
+cabal-version: 2.4
+
+-- This file has been generated from package.yaml by hpack version 0.33.0.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: 52f53efab4c596377b85d0718660446c92da89530ee76214df53a18a0fdd589d
+
+name:           web3
+version:        0.8.4.0
+synopsis:       Ethereum API for Haskell
+description:    Web3 is a Haskell client library for Ethereum
+category:       Network
+homepage:       https://github.com/airalab/hs-web3#readme
+bug-reports:    https://github.com/airalab/hs-web3/issues
+author:         Alexander Krupenkin
+maintainer:     mail@akru.me
+copyright:      (c) Alexander Krupenkin 2016
+license:        BSD-3-Clause
+license-file:   LICENSE
+build-type:     Simple
 extra-source-files:
     README.md
     CHANGELOG.md
@@ -26,386 +32,369 @@
     test/contracts/Linearization.json
 
 source-repository head
-    type: git
-    location: https://github.com/airalab/hs-web3
+  type: git
+  location: https://github.com/airalab/hs-web3
 
 flag compiler
-    description:
-        Enable Solidity compiler
-    default: False
-    manual: True
+  description: Enable Solidity compiler
+  manual: True
+  default: False
 
 flag debug
-    description:
-        Enable debug compiler options
-    default: False
-    manual: True
+  description: Enable debug compiler options
+  manual: True
+  default: False
 
 library
-    exposed-modules:
-        Crypto.Ethereum
-        Crypto.Ethereum.Keyfile
-        Crypto.Ethereum.Signature
-        Crypto.Ethereum.Utils
-        Crypto.Random.HmacDrbg
-        Data.ByteArray.HexString
-        Data.Solidity.Abi
-        Data.Solidity.Abi.Codec
-        Data.Solidity.Abi.Generic
-        Data.Solidity.Event
-        Data.Solidity.Event.Internal
-        Data.Solidity.Prim
-        Data.Solidity.Prim.Address
-        Data.Solidity.Prim.Bool
-        Data.Solidity.Prim.Bytes
-        Data.Solidity.Prim.Int
-        Data.Solidity.Prim.List
-        Data.Solidity.Prim.String
-        Data.Solidity.Prim.Tagged
-        Data.Solidity.Prim.Tuple
-        Data.Solidity.Prim.Tuple.TH
-        Data.String.Extra
-        Language.Solidity.Abi
-        Network.Ethereum.Account
-        Network.Ethereum.Account.Class
-        Network.Ethereum.Account.Default
-        Network.Ethereum.Account.Internal
-        Network.Ethereum.Account.LocalKey
-        Network.Ethereum.Account.Personal
-        Network.Ethereum.Account.Safe
-        Network.Ethereum.Api.Eth
-        Network.Ethereum.Api.Net
-        Network.Ethereum.Api.Personal
-        Network.Ethereum.Api.Provider
-        Network.Ethereum.Api.Types
-        Network.Ethereum.Api.Web3
-        Network.Ethereum.Chain
-        Network.Ethereum.Contract
-        Network.Ethereum.Contract.Event
-        Network.Ethereum.Contract.Event.Common
-        Network.Ethereum.Contract.Event.MultiFilter
-        Network.Ethereum.Contract.Event.SingleFilter
-        Network.Ethereum.Contract.Method
-        Network.Ethereum.Contract.TH
-        Network.Ethereum.Ens
-        Network.Ethereum.Ens.PublicResolver
-        Network.Ethereum.Ens.Registry
-        Network.Ethereum.Transaction
-        Network.Ethereum.Unit
-        Network.Ethereum.Web3
-        Network.JsonRpc.TinyClient
-    hs-source-dirs: src
+  exposed-modules:
+      Crypto.Ethereum
+      Crypto.Ethereum.Keyfile
+      Crypto.Ethereum.Signature
+      Crypto.Ethereum.Utils
+      Crypto.Random.HmacDrbg
+      Data.ByteArray.HexString
+      Data.Solidity.Abi
+      Data.Solidity.Abi.Codec
+      Data.Solidity.Abi.Generic
+      Data.Solidity.Event
+      Data.Solidity.Event.Internal
+      Data.Solidity.Prim
+      Data.Solidity.Prim.Address
+      Data.Solidity.Prim.Bool
+      Data.Solidity.Prim.Bytes
+      Data.Solidity.Prim.Int
+      Data.Solidity.Prim.List
+      Data.Solidity.Prim.String
+      Data.Solidity.Prim.Tagged
+      Data.Solidity.Prim.Tuple
+      Data.Solidity.Prim.Tuple.TH
+      Data.String.Extra
+      Language.Solidity.Abi
+      Network.Ethereum.Account
+      Network.Ethereum.Account.Class
+      Network.Ethereum.Account.Default
+      Network.Ethereum.Account.Internal
+      Network.Ethereum.Account.LocalKey
+      Network.Ethereum.Account.Personal
+      Network.Ethereum.Account.Safe
+      Network.Ethereum.Api.Eth
+      Network.Ethereum.Api.Net
+      Network.Ethereum.Api.Personal
+      Network.Ethereum.Api.Provider
+      Network.Ethereum.Api.Types
+      Network.Ethereum.Api.Web3
+      Network.Ethereum.Chain
+      Network.Ethereum.Contract
+      Network.Ethereum.Contract.Event
+      Network.Ethereum.Contract.Event.Common
+      Network.Ethereum.Contract.Event.MultiFilter
+      Network.Ethereum.Contract.Event.SingleFilter
+      Network.Ethereum.Contract.Method
+      Network.Ethereum.Contract.TH
+      Network.Ethereum.Ens
+      Network.Ethereum.Ens.PublicResolver
+      Network.Ethereum.Ens.Registry
+      Network.Ethereum.Transaction
+      Network.Ethereum.Unit
+      Network.Ethereum.Web3
+      Network.JsonRpc.TinyClient
+  other-modules:
+      Paths_web3
+  autogen-modules:
+      Paths_web3
+  hs-source-dirs:
+      src
+  ghc-options: -funbox-strict-fields -Wduplicate-exports -Whi-shadowing -Widentities -Woverlapping-patterns -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields -Wmissing-methods -Wmissing-exported-signatures -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing -Wunused-binds -Wunused-top-binds -Wunused-local-binds -Wunused-pattern-binds -Wunused-imports -Wunused-matches -Wunused-foralls -Wtabs
+  build-depends:
+      OneTuple >=0.2.1 && <0.3
+    , aeson >=1.2.2.0 && <1.5
+    , async >=2.1.1.1 && <2.3
+    , base >4.10 && <4.14
+    , basement >=0.0.4 && <0.1
+    , bytestring >=0.10.8.1 && <0.11
+    , cereal >=0.5.4.0 && <0.6
+    , cryptonite >=0.23 && <0.27
+    , data-default >=0.7.1.1 && <0.8
+    , exceptions >=0.8.3 && <0.11
+    , generics-sop >=0.3.1.0 && <0.6
+    , http-client >=0.5.7.1 && <0.7
+    , http-client-tls >=0.3.5.1 && <0.4
+    , machines >=0.6.3 && <0.8
+    , memory >=0.14.11 && <0.16
+    , microlens >=0.4.8.1 && <0.5
+    , microlens-aeson >=2.2.0.2 && <2.4
+    , microlens-mtl >=0.1.11.0 && <0.3
+    , microlens-th >=0.4.1.1 && <0.5
+    , mtl >=2.2.1 && <2.3
+    , parsec >=3.1.11 && <3.2
+    , relapse >=1.0.0.0 && <2.0
+    , tagged >=0.8.5 && <0.9
+    , template-haskell >=2.12 && <2.16
+    , text >=1.2.2.2 && <1.3
+    , transformers >=0.5.2.0 && <0.6
+    , uuid-types >=1.0.3 && <1.1
+    , vinyl >=0.5.3 && <0.13
+  if flag(debug)
+    ghc-options: -ddump-splices
+  if flag(compiler)
     other-modules:
-        Paths_web3
-    default-language: Haskell2010
-    ghc-options: -funbox-strict-fields -Wduplicate-exports
-                 -Whi-shadowing -Widentities -Woverlapping-patterns
-                 -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes
-                 -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields
-                 -Wmissing-methods -Wmissing-exported-signatures
-                 -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing
-                 -Wunused-binds -Wunused-top-binds -Wunused-local-binds
-                 -Wunused-pattern-binds -Wunused-imports -Wunused-matches
-                 -Wunused-foralls -Wtabs
+        Language.Solidity.Compiler
+        Language.Solidity.Compiler.Foreign
+    hs-source-dirs:
+        compiler
+    cpp-options: -DSOLIDITY_COMPILER
+    include-dirs:
+        ./compiler/cbits
+    c-sources:
+        ./compiler/cbits/solidity_lite.cpp
+    extra-libraries:
+        solidity
     build-depends:
-        OneTuple >=0.2.1 && <0.3,
-        aeson >=1.1.2.0 && <1.5,
-        async >=2.1.1.1 && <2.3,
-        base >4.10 && <4.13,
-        basement >=0.0.4 && <0.1,
-        bytestring >=0.10.8.1 && <0.11,
-        cereal >=0.5.4.0 && <0.6,
-        cryptonite >=0.23 && <0.26,
-        data-default >=0.7.1.1 && <0.8,
-        exceptions >=0.8.3 && <0.11,
-        generics-sop >=0.3.1.0 && <0.6,
-        http-client >=0.5.7.1 && <0.7,
-        http-client-tls >=0.3.5.1 && <0.4,
-        machines >=0.6.3 && <0.8,
-        memory >=0.14.11 && <0.15,
-        microlens >=0.4.8.1 && <0.5,
-        microlens-aeson >=2.2.0.2 && <2.4,
-        microlens-mtl >=0.1.11.0 && <0.2,
-        microlens-th >=0.4.1.1 && <0.5,
-        mtl >=2.2.1 && <2.3,
-        parsec >=3.1.11 && <3.2,
-        relapse >=1.0.0.0 && <2.0,
-        tagged >=0.8.5 && <0.9,
-        template-haskell >=2.12 && <2.15,
-        text >=1.2.2.2 && <1.3,
-        transformers >=0.5.2.0 && <0.6,
-        uuid-types >=1.0.3 && <1.1,
-        vinyl >=0.5.3 && <0.12
-    
-    if flag(debug)
-        ghc-options: -ddump-splices
-    
-    if flag(compiler)
-        cpp-options: -DSOLIDITY_COMPILER
-        c-sources:
-            ./compiler/cbits/solidity_lite.cpp
-        hs-source-dirs: compiler
-        other-modules:
-            Language.Solidity.Compiler
-            Language.Solidity.Compiler.Foreign
-        extra-libraries:
-            solidity
-        include-dirs: ./compiler/cbits
-        build-depends:
-            containers >=0.6.0.1 && <0.7
+        containers
+  default-language: Haskell2010
 
 test-suite live
-    type: exitcode-stdio-1.0
-    main-is: Spec.hs
-    hs-source-dirs: test src
+  type: exitcode-stdio-1.0
+  main-is: Spec.hs
+  other-modules:
+      Network.Ethereum.Web3.Test.ComplexStorageSpec
+      Network.Ethereum.Web3.Test.ERC20Spec
+      Network.Ethereum.Web3.Test.LinearizationSpec
+      Network.Ethereum.Web3.Test.LocalAccountSpec
+      Network.Ethereum.Web3.Test.RegistrySpec
+      Network.Ethereum.Web3.Test.SimpleStorageSpec
+      Network.Ethereum.Web3.Test.Utils
+      Crypto.Ethereum
+      Crypto.Ethereum.Keyfile
+      Crypto.Ethereum.Signature
+      Crypto.Ethereum.Utils
+      Crypto.Random.HmacDrbg
+      Data.ByteArray.HexString
+      Data.Solidity.Abi
+      Data.Solidity.Abi.Codec
+      Data.Solidity.Abi.Generic
+      Data.Solidity.Event
+      Data.Solidity.Event.Internal
+      Data.Solidity.Prim
+      Data.Solidity.Prim.Address
+      Data.Solidity.Prim.Bool
+      Data.Solidity.Prim.Bytes
+      Data.Solidity.Prim.Int
+      Data.Solidity.Prim.List
+      Data.Solidity.Prim.String
+      Data.Solidity.Prim.Tagged
+      Data.Solidity.Prim.Tuple
+      Data.Solidity.Prim.Tuple.TH
+      Data.String.Extra
+      Language.Solidity.Abi
+      Network.Ethereum.Account
+      Network.Ethereum.Account.Class
+      Network.Ethereum.Account.Default
+      Network.Ethereum.Account.Internal
+      Network.Ethereum.Account.LocalKey
+      Network.Ethereum.Account.Personal
+      Network.Ethereum.Account.Safe
+      Network.Ethereum.Api.Eth
+      Network.Ethereum.Api.Net
+      Network.Ethereum.Api.Personal
+      Network.Ethereum.Api.Provider
+      Network.Ethereum.Api.Types
+      Network.Ethereum.Api.Web3
+      Network.Ethereum.Chain
+      Network.Ethereum.Contract
+      Network.Ethereum.Contract.Event
+      Network.Ethereum.Contract.Event.Common
+      Network.Ethereum.Contract.Event.MultiFilter
+      Network.Ethereum.Contract.Event.SingleFilter
+      Network.Ethereum.Contract.Method
+      Network.Ethereum.Contract.TH
+      Network.Ethereum.Ens
+      Network.Ethereum.Ens.PublicResolver
+      Network.Ethereum.Ens.Registry
+      Network.Ethereum.Transaction
+      Network.Ethereum.Unit
+      Network.Ethereum.Web3
+      Network.JsonRpc.TinyClient
+      Paths_web3
+  hs-source-dirs:
+      test
+      src
+  ghc-options: -funbox-strict-fields -Wduplicate-exports -Whi-shadowing -Widentities -Woverlapping-patterns -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields -Wmissing-methods -Wmissing-exported-signatures -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing -Wunused-binds -Wunused-top-binds -Wunused-local-binds -Wunused-pattern-binds -Wunused-imports -Wunused-matches -Wunused-foralls -Wtabs -threaded -rtsopts -with-rtsopts=-N
+  build-depends:
+      OneTuple >=0.2.1 && <0.3
+    , aeson >=1.2.2.0 && <1.5
+    , async >=2.1.1.1 && <2.3
+    , base >4.10 && <4.14
+    , basement >=0.0.4 && <0.1
+    , bytestring >=0.10.8.1 && <0.11
+    , cereal >=0.5.4.0 && <0.6
+    , cryptonite >=0.23 && <0.27
+    , data-default >=0.7.1.1 && <0.8
+    , exceptions >=0.8.3 && <0.11
+    , generics-sop >=0.3.1.0 && <0.6
+    , hspec >=2.4.4 && <2.8
+    , hspec-contrib >=0.4.0 && <0.6
+    , hspec-discover >=2.4.4 && <2.8
+    , hspec-expectations >=0.8.2 && <0.9
+    , http-client >=0.5.7.1 && <0.7
+    , http-client-tls >=0.3.5.1 && <0.4
+    , machines >=0.6.3 && <0.8
+    , memory >=0.14.11 && <0.16
+    , microlens >=0.4.8.1 && <0.5
+    , microlens-aeson >=2.2.0.2 && <2.4
+    , microlens-mtl >=0.1.11.0 && <0.3
+    , microlens-th >=0.4.1.1 && <0.5
+    , mtl >=2.2.1 && <2.3
+    , parsec >=3.1.11 && <3.2
+    , random >=1.1 && <1.2
+    , relapse >=1.0.0.0 && <2.0
+    , split >=0.2.3 && <0.3
+    , stm >=2.4.4 && <2.6
+    , tagged >=0.8.5 && <0.9
+    , template-haskell >=2.12 && <2.16
+    , text >=1.2.2.2 && <1.3
+    , time >=1.6.0 && <1.11
+    , transformers >=0.5.2.0 && <0.6
+    , uuid-types >=1.0.3 && <1.1
+    , vinyl >=0.5.3 && <0.13
+  if flag(debug)
+    ghc-options: -ddump-splices
+  if flag(compiler)
     other-modules:
-        Network.Ethereum.Web3.Test.ComplexStorageSpec
-        Network.Ethereum.Web3.Test.ERC20Spec
-        Network.Ethereum.Web3.Test.LinearizationSpec
-        Network.Ethereum.Web3.Test.LocalAccountSpec
-        Network.Ethereum.Web3.Test.RegistrySpec
-        Network.Ethereum.Web3.Test.SimpleStorageSpec
-        Network.Ethereum.Web3.Test.Utils
-        Crypto.Ethereum
-        Crypto.Ethereum.Keyfile
-        Crypto.Ethereum.Signature
-        Crypto.Ethereum.Utils
-        Crypto.Random.HmacDrbg
-        Data.ByteArray.HexString
-        Data.Solidity.Abi
-        Data.Solidity.Abi.Codec
-        Data.Solidity.Abi.Generic
-        Data.Solidity.Event
-        Data.Solidity.Event.Internal
-        Data.Solidity.Prim
-        Data.Solidity.Prim.Address
-        Data.Solidity.Prim.Bool
-        Data.Solidity.Prim.Bytes
-        Data.Solidity.Prim.Int
-        Data.Solidity.Prim.List
-        Data.Solidity.Prim.String
-        Data.Solidity.Prim.Tagged
-        Data.Solidity.Prim.Tuple
-        Data.Solidity.Prim.Tuple.TH
-        Data.String.Extra
-        Language.Solidity.Abi
-        Network.Ethereum.Account
-        Network.Ethereum.Account.Class
-        Network.Ethereum.Account.Default
-        Network.Ethereum.Account.Internal
-        Network.Ethereum.Account.LocalKey
-        Network.Ethereum.Account.Personal
-        Network.Ethereum.Account.Safe
-        Network.Ethereum.Api.Eth
-        Network.Ethereum.Api.Net
-        Network.Ethereum.Api.Personal
-        Network.Ethereum.Api.Provider
-        Network.Ethereum.Api.Types
-        Network.Ethereum.Api.Web3
-        Network.Ethereum.Chain
-        Network.Ethereum.Contract
-        Network.Ethereum.Contract.Event
-        Network.Ethereum.Contract.Event.Common
-        Network.Ethereum.Contract.Event.MultiFilter
-        Network.Ethereum.Contract.Event.SingleFilter
-        Network.Ethereum.Contract.Method
-        Network.Ethereum.Contract.TH
-        Network.Ethereum.Ens
-        Network.Ethereum.Ens.PublicResolver
-        Network.Ethereum.Ens.Registry
-        Network.Ethereum.Transaction
-        Network.Ethereum.Unit
-        Network.Ethereum.Web3
-        Network.JsonRpc.TinyClient
-        Paths_web3
-    default-language: Haskell2010
-    ghc-options: -funbox-strict-fields -Wduplicate-exports
-                 -Whi-shadowing -Widentities -Woverlapping-patterns
-                 -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes
-                 -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields
-                 -Wmissing-methods -Wmissing-exported-signatures
-                 -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing
-                 -Wunused-binds -Wunused-top-binds -Wunused-local-binds
-                 -Wunused-pattern-binds -Wunused-imports -Wunused-matches
-                 -Wunused-foralls -Wtabs -threaded -rtsopts -with-rtsopts=-N
+        Language.Solidity.Compiler
+        Language.Solidity.Compiler.Foreign
+    hs-source-dirs:
+        compiler
+    cpp-options: -DSOLIDITY_COMPILER
+    include-dirs:
+        ./compiler/cbits
+    c-sources:
+        ./compiler/cbits/solidity_lite.cpp
+    extra-libraries:
+        solidity
     build-depends:
-        OneTuple >=0.2.1 && <0.3,
-        aeson >=1.1.2.0 && <1.5,
-        async >=2.1.1.1 && <2.3,
-        base >4.10 && <4.13,
-        basement >=0.0.4 && <0.1,
-        bytestring >=0.10.8.1 && <0.11,
-        cereal >=0.5.4.0 && <0.6,
-        cryptonite >=0.23 && <0.26,
-        data-default >=0.7.1.1 && <0.8,
-        exceptions >=0.8.3 && <0.11,
-        generics-sop >=0.3.1.0 && <0.6,
-        hspec >=2.4.4 && <2.8,
-        hspec-contrib >=0.4.0 && <0.6,
-        hspec-discover >=2.4.4 && <2.8,
-        hspec-expectations >=0.8.2 && <0.9,
-        http-client >=0.5.7.1 && <0.7,
-        http-client-tls >=0.3.5.1 && <0.4,
-        machines >=0.6.3 && <0.8,
-        memory >=0.14.11 && <0.15,
-        microlens >=0.4.8.1 && <0.5,
-        microlens-aeson >=2.2.0.2 && <2.4,
-        microlens-mtl >=0.1.11.0 && <0.2,
-        microlens-th >=0.4.1.1 && <0.5,
-        mtl >=2.2.1 && <2.3,
-        parsec >=3.1.11 && <3.2,
-        random ==1.1.*,
-        relapse >=1.0.0.0 && <2.0,
-        split >=0.2.3 && <0.3,
-        stm >=2.4.4 && <2.6,
-        tagged >=0.8.5 && <0.9,
-        template-haskell >=2.12 && <2.15,
-        text >=1.2.2.2 && <1.3,
-        time >=1.6.0 && <1.9,
-        transformers >=0.5.2.0 && <0.6,
-        uuid-types >=1.0.3 && <1.1,
-        vinyl >=0.5.3 && <0.12
-    
-    if flag(debug)
-        ghc-options: -ddump-splices
-    
-    if flag(compiler)
-        cpp-options: -DSOLIDITY_COMPILER
-        c-sources:
-            ./compiler/cbits/solidity_lite.cpp
-        hs-source-dirs: compiler
-        other-modules:
-            Language.Solidity.Compiler
-            Language.Solidity.Compiler.Foreign
-        extra-libraries:
-            solidity
-        include-dirs: ./compiler/cbits
-        build-depends:
-            containers >=0.6.0.1 && <0.7
+        containers
+  default-language: Haskell2010
 
 test-suite unit
-    type: exitcode-stdio-1.0
-    main-is: Spec.hs
-    hs-source-dirs: unit src
+  type: exitcode-stdio-1.0
+  main-is: Spec.hs
+  other-modules:
+      Crypto.Ethereum.Test.KeyfileSpec
+      Crypto.Ethereum.Test.SignatureSpec
+      Crypto.Random.Test.HmacDrbgSpec
+      Data.Solidity.Test.AddressSpec
+      Data.Solidity.Test.EncodingSpec
+      Data.Solidity.Test.IntSpec
+      Language.Solidity.Test.AbiSpec
+      Language.Solidity.Test.CompilerSpec
+      Network.Ethereum.Contract.Test.THSpec
+      Network.Ethereum.Web3.Test.EventSpec
+      Network.Ethereum.Web3.Test.MethodDumpSpec
+      Crypto.Ethereum
+      Crypto.Ethereum.Keyfile
+      Crypto.Ethereum.Signature
+      Crypto.Ethereum.Utils
+      Crypto.Random.HmacDrbg
+      Data.ByteArray.HexString
+      Data.Solidity.Abi
+      Data.Solidity.Abi.Codec
+      Data.Solidity.Abi.Generic
+      Data.Solidity.Event
+      Data.Solidity.Event.Internal
+      Data.Solidity.Prim
+      Data.Solidity.Prim.Address
+      Data.Solidity.Prim.Bool
+      Data.Solidity.Prim.Bytes
+      Data.Solidity.Prim.Int
+      Data.Solidity.Prim.List
+      Data.Solidity.Prim.String
+      Data.Solidity.Prim.Tagged
+      Data.Solidity.Prim.Tuple
+      Data.Solidity.Prim.Tuple.TH
+      Data.String.Extra
+      Language.Solidity.Abi
+      Network.Ethereum.Account
+      Network.Ethereum.Account.Class
+      Network.Ethereum.Account.Default
+      Network.Ethereum.Account.Internal
+      Network.Ethereum.Account.LocalKey
+      Network.Ethereum.Account.Personal
+      Network.Ethereum.Account.Safe
+      Network.Ethereum.Api.Eth
+      Network.Ethereum.Api.Net
+      Network.Ethereum.Api.Personal
+      Network.Ethereum.Api.Provider
+      Network.Ethereum.Api.Types
+      Network.Ethereum.Api.Web3
+      Network.Ethereum.Chain
+      Network.Ethereum.Contract
+      Network.Ethereum.Contract.Event
+      Network.Ethereum.Contract.Event.Common
+      Network.Ethereum.Contract.Event.MultiFilter
+      Network.Ethereum.Contract.Event.SingleFilter
+      Network.Ethereum.Contract.Method
+      Network.Ethereum.Contract.TH
+      Network.Ethereum.Ens
+      Network.Ethereum.Ens.PublicResolver
+      Network.Ethereum.Ens.Registry
+      Network.Ethereum.Transaction
+      Network.Ethereum.Unit
+      Network.Ethereum.Web3
+      Network.JsonRpc.TinyClient
+      Paths_web3
+  hs-source-dirs:
+      unit
+      src
+  ghc-options: -funbox-strict-fields -Wduplicate-exports -Whi-shadowing -Widentities -Woverlapping-patterns -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields -Wmissing-methods -Wmissing-exported-signatures -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing -Wunused-binds -Wunused-top-binds -Wunused-local-binds -Wunused-pattern-binds -Wunused-imports -Wunused-matches -Wunused-foralls -Wtabs -threaded -rtsopts -with-rtsopts=-N
+  build-depends:
+      OneTuple >=0.2.1 && <0.3
+    , aeson >=1.2.2.0 && <1.5
+    , async >=2.1.1.1 && <2.3
+    , base >4.10 && <4.14
+    , basement >=0.0.4 && <0.1
+    , bytestring >=0.10.8.1 && <0.11
+    , cereal >=0.5.4.0 && <0.6
+    , cryptonite >=0.23 && <0.27
+    , data-default >=0.7.1.1 && <0.8
+    , exceptions >=0.8.3 && <0.11
+    , generics-sop >=0.3.1.0 && <0.6
+    , hspec >=2.4.4 && <2.8
+    , hspec-contrib >=0.4.0 && <0.6
+    , hspec-discover >=2.4.4 && <2.8
+    , hspec-expectations >=0.8.2 && <0.9
+    , http-client >=0.5.7.1 && <0.7
+    , http-client-tls >=0.3.5.1 && <0.4
+    , machines >=0.6.3 && <0.8
+    , memory >=0.14.11 && <0.16
+    , microlens >=0.4.8.1 && <0.5
+    , microlens-aeson >=2.2.0.2 && <2.4
+    , microlens-mtl >=0.1.11.0 && <0.3
+    , microlens-th >=0.4.1.1 && <0.5
+    , mtl >=2.2.1 && <2.3
+    , parsec >=3.1.11 && <3.2
+    , relapse >=1.0.0.0 && <2.0
+    , tagged >=0.8.5 && <0.9
+    , template-haskell >=2.12 && <2.16
+    , text >=1.2.2.2 && <1.3
+    , transformers >=0.5.2.0 && <0.6
+    , uuid-types >=1.0.3 && <1.1
+    , vinyl >=0.5.3 && <0.13
+  if flag(debug)
+    ghc-options: -ddump-splices
+  if flag(compiler)
     other-modules:
-        Crypto.Ethereum.Test.KeyfileSpec
-        Crypto.Ethereum.Test.SignatureSpec
-        Crypto.Random.Test.HmacDrbgSpec
-        Data.Solidity.Test.AddressSpec
-        Data.Solidity.Test.EncodingSpec
-        Data.Solidity.Test.IntSpec
-        Language.Solidity.Test.CompilerSpec
-        Network.Ethereum.Web3.Test.EventSpec
-        Network.Ethereum.Web3.Test.MethodDumpSpec
-        Crypto.Ethereum
-        Crypto.Ethereum.Keyfile
-        Crypto.Ethereum.Signature
-        Crypto.Ethereum.Utils
-        Crypto.Random.HmacDrbg
-        Data.ByteArray.HexString
-        Data.Solidity.Abi
-        Data.Solidity.Abi.Codec
-        Data.Solidity.Abi.Generic
-        Data.Solidity.Event
-        Data.Solidity.Event.Internal
-        Data.Solidity.Prim
-        Data.Solidity.Prim.Address
-        Data.Solidity.Prim.Bool
-        Data.Solidity.Prim.Bytes
-        Data.Solidity.Prim.Int
-        Data.Solidity.Prim.List
-        Data.Solidity.Prim.String
-        Data.Solidity.Prim.Tagged
-        Data.Solidity.Prim.Tuple
-        Data.Solidity.Prim.Tuple.TH
-        Data.String.Extra
-        Language.Solidity.Abi
-        Network.Ethereum.Account
-        Network.Ethereum.Account.Class
-        Network.Ethereum.Account.Default
-        Network.Ethereum.Account.Internal
-        Network.Ethereum.Account.LocalKey
-        Network.Ethereum.Account.Personal
-        Network.Ethereum.Account.Safe
-        Network.Ethereum.Api.Eth
-        Network.Ethereum.Api.Net
-        Network.Ethereum.Api.Personal
-        Network.Ethereum.Api.Provider
-        Network.Ethereum.Api.Types
-        Network.Ethereum.Api.Web3
-        Network.Ethereum.Chain
-        Network.Ethereum.Contract
-        Network.Ethereum.Contract.Event
-        Network.Ethereum.Contract.Event.Common
-        Network.Ethereum.Contract.Event.MultiFilter
-        Network.Ethereum.Contract.Event.SingleFilter
-        Network.Ethereum.Contract.Method
-        Network.Ethereum.Contract.TH
-        Network.Ethereum.Ens
-        Network.Ethereum.Ens.PublicResolver
-        Network.Ethereum.Ens.Registry
-        Network.Ethereum.Transaction
-        Network.Ethereum.Unit
-        Network.Ethereum.Web3
-        Network.JsonRpc.TinyClient
-        Paths_web3
-    default-language: Haskell2010
-    ghc-options: -funbox-strict-fields -Wduplicate-exports
-                 -Whi-shadowing -Widentities -Woverlapping-patterns
-                 -Wpartial-type-signatures -Wunrecognised-pragmas -Wtyped-holes
-                 -Wincomplete-patterns -Wincomplete-uni-patterns -Wmissing-fields
-                 -Wmissing-methods -Wmissing-exported-signatures
-                 -Wmissing-monadfail-instances -Wmissing-signatures -Wname-shadowing
-                 -Wunused-binds -Wunused-top-binds -Wunused-local-binds
-                 -Wunused-pattern-binds -Wunused-imports -Wunused-matches
-                 -Wunused-foralls -Wtabs -threaded -rtsopts -with-rtsopts=-N
+        Language.Solidity.Compiler
+        Language.Solidity.Compiler.Foreign
+    hs-source-dirs:
+        compiler
+    cpp-options: -DSOLIDITY_COMPILER
+    include-dirs:
+        ./compiler/cbits
+    c-sources:
+        ./compiler/cbits/solidity_lite.cpp
+    extra-libraries:
+        solidity
     build-depends:
-        OneTuple >=0.2.1 && <0.3,
-        aeson >=1.1.2.0 && <1.5,
-        async >=2.1.1.1 && <2.3,
-        base >4.10 && <4.13,
-        basement >=0.0.4 && <0.1,
-        bytestring >=0.10.8.1 && <0.11,
-        cereal >=0.5.4.0 && <0.6,
-        cryptonite >=0.23 && <0.26,
-        data-default >=0.7.1.1 && <0.8,
-        exceptions >=0.8.3 && <0.11,
-        generics-sop >=0.3.1.0 && <0.6,
-        hspec >=2.4.4 && <2.8,
-        hspec-contrib >=0.4.0 && <0.6,
-        hspec-discover >=2.4.4 && <2.8,
-        hspec-expectations >=0.8.2 && <0.9,
-        http-client >=0.5.7.1 && <0.7,
-        http-client-tls >=0.3.5.1 && <0.4,
-        machines >=0.6.3 && <0.8,
-        memory >=0.14.11 && <0.15,
-        microlens >=0.4.8.1 && <0.5,
-        microlens-aeson >=2.2.0.2 && <2.4,
-        microlens-mtl >=0.1.11.0 && <0.2,
-        microlens-th >=0.4.1.1 && <0.5,
-        mtl >=2.2.1 && <2.3,
-        parsec >=3.1.11 && <3.2,
-        relapse >=1.0.0.0 && <2.0,
-        tagged >=0.8.5 && <0.9,
-        template-haskell >=2.12 && <2.15,
-        text >=1.2.2.2 && <1.3,
-        transformers >=0.5.2.0 && <0.6,
-        uuid-types >=1.0.3 && <1.1,
-        vinyl >=0.5.3 && <0.12
-    
-    if flag(debug)
-        ghc-options: -ddump-splices
-    
-    if flag(compiler)
-        cpp-options: -DSOLIDITY_COMPILER
-        c-sources:
-            ./compiler/cbits/solidity_lite.cpp
-        hs-source-dirs: compiler
-        other-modules:
-            Language.Solidity.Compiler
-            Language.Solidity.Compiler.Foreign
-        extra-libraries:
-            solidity
-        include-dirs: ./compiler/cbits
-        build-depends:
-            containers >=0.6.0.1 && <0.7
+        containers
+  default-language: Haskell2010
