diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for polysemy-blockfrost
+
+## 0.1.0.0 -- YYYY-mm-dd
+
+* First version. Released on an unsuspecting world.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2024, John Ky
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of John Ky nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,1 @@
+# polysemy-blockfrost
diff --git a/polysemy-blockfrost.cabal b/polysemy-blockfrost.cabal
new file mode 100644
--- /dev/null
+++ b/polysemy-blockfrost.cabal
@@ -0,0 +1,69 @@
+cabal-version:          3.4
+
+
+name:                   polysemy-blockfrost
+version:                0.1.0.0
+synopsis:               Polysemy wrapper around the Blockfrost client
+description:            Polysemy wrapper around the Blockfrost client.
+license:                Apache-2.0
+license-file:           LICENSE
+author:                 John Ky
+maintainer:             newhoggy@gmail.com
+copyright:              2024 John Ky
+category:               Development
+build-type:             Simple
+extra-doc-files:        CHANGELOG.md
+extra-source-files:     README.md
+
+source-repository head
+  type:                 git
+  location:             https://github.com/haskell-works/polysemy-blockfrost
+
+common base                       { build-depends: base                       >= 4.18.2.1   && < 5      }
+
+common blockfrost-api             { build-depends: blockfrost-api                              < 0.11   }
+common blockfrost-client          { build-depends: blockfrost-client                           < 0.9    }
+common polysemy                   { build-depends: polysemy                                    < 2      }
+common polysemy-log               { build-depends: polysemy-log                                < 0.11   }
+common polysemy-plugin            { build-depends: polysemy-plugin                             < 0.5    }
+common tasty                      { build-depends: tasty                                       < 1.6    }
+common text                       { build-depends: text                                        < 3      }
+
+common polysemy-blockfrost       { build-depends: polysemy-blockfrost                                 }
+
+common project-config
+  import:               polysemy,
+                        polysemy-plugin,
+  default-extensions:   BlockArguments
+                        DataKinds
+                        FlexibleContexts
+                        FlexibleInstances
+                        LambdaCase
+                        NoImplicitPrelude
+                        OverloadedStrings
+                        TypeApplications
+  ghc-options:          -Wall
+                        -fplugin=Polysemy.Plugin
+
+library
+  import:               base, project-config,
+                        blockfrost-api,
+                        blockfrost-client,
+                        polysemy,
+                        text,
+  exposed-modules:      Polysemy.Blockfrost
+                        Polysemy.Blockfrost.Api
+                        Polysemy.Blockfrost.Client
+                        Polysemy.Blockfrost.Effect.Blockfrost
+  hs-source-dirs:       src
+  default-language:     GHC2021
+
+test-suite polysemy-blockfrost-test
+  import:               base, project-config,
+                        tasty,
+  default-language:     GHC2021
+  type:                 exitcode-stdio-1.0
+  build-tool-depends:   tasty-discover:tasty-discover
+  hs-source-dirs:       test
+  main-is:              Main.hs
+  ghc-options:          -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
diff --git a/src/Polysemy/Blockfrost.hs b/src/Polysemy/Blockfrost.hs
new file mode 100644
--- /dev/null
+++ b/src/Polysemy/Blockfrost.hs
@@ -0,0 +1,171 @@
+module Polysemy.Blockfrost
+  ( Blockfrost,
+    BlockfrostError,
+    Project,
+    runBlockfrost,
+
+    -- * Client
+    getRoot,
+    getHealth,
+    getClock,
+    getMetrics,
+    getMetricsEndpoints,
+
+    -- * Client.NutLink
+    nutlinkListAddress,
+    nutlinkListAddressTickers',
+    nutlinkListAddressTickers,
+    nutlinkAddressTickers',
+    nutlinkAddressTickers,
+    nutlinkTickers',
+    nutlinkTickers,
+
+    -- * Client.IPFS
+    ipfsGateway,
+    ipfsPin,
+    ipfsListPins',
+    ipfsListPins,
+    ipfsGetPin,
+    ipfsRemovePin,
+
+    -- * Client.Cardano.Blocks
+    getLatestBlock,
+    getLatestBlockTxs',
+    getLatestBlockTxs,
+    getBlock,
+    getBlockSlot,
+    getBlockEpochSlot,
+    getNextBlocks',
+    getNextBlocks,
+    getPreviousBlocks',
+    getPreviousBlocks,
+    getBlockTxs',
+    getBlockTxs,
+    getBlockAffectedAddresses',
+    getBlockAffectedAddresses,
+
+    -- * Client.Cardano.Network
+    getNetworkInfo,
+    getNetworkEras,
+
+    -- * Client.Cardano.Addresses
+    getAddressInfo,
+    getAddressInfoExtended,
+    getAddressDetails,
+    getAddressUtxos',
+    getAddressUtxos,
+    getAddressUtxosAsset',
+    getAddressUtxosAsset,
+    getAddressTransactions,
+
+    -- * Client.Cardano.Assets
+    getAssets',
+    getAssets,
+    getAssetDetails,
+    getAssetHistory',
+    getAssetHistory,
+    getAssetTransactions',
+    getAssetTransactions,
+    getAssetAddresses',
+    getAssetAddresses,
+    getAssetsByPolicy',
+    getAssetsByPolicy,
+
+    -- * Client.Cardano.Scripts
+    listScripts',
+    listScripts,
+    getScript,
+    getScriptRedeemers',
+    getScriptRedeemers,
+    getScriptDatum,
+    getScriptDatumCBOR,
+    getScriptJSON,
+    getScriptCBOR,
+
+    -- * Client.Cardano.Epochs
+    getLatestEpoch,
+    getLatestEpochProtocolParams,
+    getEpoch,
+    getNextEpochs',
+    getNextEpochs,
+    getPreviousEpochs',
+    getPreviousEpochs,
+    getEpochStake',
+    getEpochStake,
+    getEpochStakeByPool',
+    getEpochStakeByPool,
+    getEpochBlocks',
+    getEpochBlocks,
+    getEpochBlocksByPool',
+    getEpochBlocksByPool,
+    getEpochProtocolParams,
+
+    -- * Client.Cardano.Transactions
+    getTx,
+    getTxUtxos,
+    getTxRedeemers,
+    getTxStakes,
+    getTxDelegations,
+    getTxWithdrawals,
+    getTxMirs,
+    getTxPoolUpdates,
+    getTxPoolRetiring,
+    getTxMetadataJSON,
+    getTxMetadataCBOR,
+    submitTx,
+
+    -- * Client.Cardano.Ledger
+    getLedgerGenesis,
+
+    -- * Client.Cardano.Accounts
+    getAccount,
+    getAccountRewards',
+    getAccountRewards,
+    getAccountHistory',
+    getAccountHistory,
+    getAccountDelegations',
+    getAccountDelegations,
+    getAccountRegistrations',
+    getAccountRegistrations,
+    getAccountWithdrawals',
+    getAccountWithdrawals,
+    getAccountMirs',
+    getAccountMirs,
+    getAccountAssociatedAddresses',
+    getAccountAssociatedAddresses,
+    getAccountAssociatedAddressesTotal,
+    getAccountAssociatedAssets',
+    getAccountAssociatedAssets,
+
+    -- * Client.Cardano.Pools
+    listPools',
+    listPools,
+    listPoolsExtended',
+    listPoolsExtended,
+    listRetiredPools',
+    listRetiredPools,
+    listRetiringPools',
+    listRetiringPools,
+    getPool,
+    getPoolHistory',
+    getPoolHistory,
+    getPoolMetadata,
+    getPoolRelays,
+    getPoolDelegators',
+    getPoolDelegators,
+    getPoolBlocks',
+    getPoolBlocks,
+    getPoolUpdates',
+    getPoolUpdates,
+
+    -- * Client.Cardano.Metadata
+    getTxMetadataLabels',
+    getTxMetadataLabels,
+    getTxMetadataByLabelJSON',
+    getTxMetadataByLabelJSON,
+    getTxMetadataByLabelCBOR',
+    getTxMetadataByLabelCBOR,
+
+  ) where
+
+import           Polysemy.Blockfrost.Api
diff --git a/src/Polysemy/Blockfrost/Api.hs b/src/Polysemy/Blockfrost/Api.hs
new file mode 100644
--- /dev/null
+++ b/src/Polysemy/Blockfrost/Api.hs
@@ -0,0 +1,587 @@
+{-# LANGUAGE FlexibleContexts #-}
+
+module Polysemy.Blockfrost.Api
+  ( Blockfrost,
+    BlockfrostError,
+    Project,
+    runBlockfrost,
+
+    -- Client
+    getRoot                             ,
+    getHealth                           ,
+    getClock                            ,
+    getMetrics                          ,
+    getMetricsEndpoints                 ,
+
+    -- Client.NutLink
+    nutlinkListAddress                  ,
+    nutlinkListAddressTickers'          ,
+    nutlinkListAddressTickers           ,
+    nutlinkAddressTickers'              ,
+    nutlinkAddressTickers               ,
+    nutlinkTickers'                     ,
+    nutlinkTickers                      ,
+
+    -- Client.IPFS
+    ipfsGateway                         ,
+    ipfsPin                             ,
+    ipfsListPins'                       ,
+    ipfsListPins                        ,
+    ipfsGetPin                          ,
+    ipfsRemovePin                       ,
+
+    -- Client.Cardano.Blocks
+    getLatestBlock                      ,
+    getLatestBlockTxs'                  ,
+    getLatestBlockTxs                   ,
+    getBlock                            ,
+    getBlockSlot                        ,
+    getBlockEpochSlot                   ,
+    getNextBlocks'                      ,
+    getNextBlocks                       ,
+    getPreviousBlocks'                  ,
+    getPreviousBlocks                   ,
+    getBlockTxs'                        ,
+    getBlockTxs                         ,
+    getBlockAffectedAddresses'          ,
+    getBlockAffectedAddresses           ,
+
+    -- Client.Cardano.Network
+    getNetworkInfo                      ,
+    getNetworkEras                      ,
+
+    -- Client.Cardano.Addresses
+    getAddressInfo                      ,
+    getAddressInfoExtended              ,
+    getAddressDetails                   ,
+    getAddressUtxos'                    ,
+    getAddressUtxos                     ,
+    getAddressUtxosAsset'               ,
+    getAddressUtxosAsset                ,
+    getAddressTransactions              ,
+
+    -- Client.Cardano.Assets
+    getAssets'                          ,
+    getAssets                           ,
+    getAssetDetails                     ,
+    getAssetHistory'                    ,
+    getAssetHistory                     ,
+    getAssetTransactions'               ,
+    getAssetTransactions                ,
+    getAssetAddresses'                  ,
+    getAssetAddresses                   ,
+    getAssetsByPolicy'                  ,
+    getAssetsByPolicy                   ,
+
+    -- Client.Cardano.Scripts
+    listScripts'                        ,
+    listScripts                         ,
+    getScript                           ,
+    getScriptRedeemers'                 ,
+    getScriptRedeemers                  ,
+    getScriptDatum                      ,
+    getScriptDatumCBOR                  ,
+    getScriptJSON                       ,
+    getScriptCBOR                       ,
+
+    -- Client.Cardano.Epochs
+    getLatestEpoch                      ,
+    getLatestEpochProtocolParams        ,
+    getEpoch                            ,
+    getNextEpochs'                      ,
+    getNextEpochs                       ,
+    getPreviousEpochs'                  ,
+    getPreviousEpochs                   ,
+    getEpochStake'                      ,
+    getEpochStake                       ,
+    getEpochStakeByPool'                ,
+    getEpochStakeByPool                 ,
+    getEpochBlocks'                     ,
+    getEpochBlocks                      ,
+    getEpochBlocksByPool'               ,
+    getEpochBlocksByPool                ,
+    getEpochProtocolParams              ,
+
+    -- Client.Cardano.Transactions
+    getTx                               ,
+    getTxUtxos                          ,
+    getTxRedeemers                      ,
+    getTxStakes                         ,
+    getTxDelegations                    ,
+    getTxWithdrawals                    ,
+    getTxMirs                           ,
+    getTxPoolUpdates                    ,
+    getTxPoolRetiring                   ,
+    getTxMetadataJSON                   ,
+    getTxMetadataCBOR                   ,
+    submitTx                            ,
+
+    -- Client.Cardano.Ledger
+    getLedgerGenesis                    ,
+
+    -- Client.Cardano.Accounts
+    getAccount                          ,
+    getAccountRewards'                  ,
+    getAccountRewards                   ,
+    getAccountHistory'                  ,
+    getAccountHistory                   ,
+    getAccountDelegations'              ,
+    getAccountDelegations               ,
+    getAccountRegistrations'            ,
+    getAccountRegistrations             ,
+    getAccountWithdrawals'              ,
+    getAccountWithdrawals               ,
+    getAccountMirs'                     ,
+    getAccountMirs                      ,
+    getAccountAssociatedAddresses'      ,
+    getAccountAssociatedAddresses       ,
+    getAccountAssociatedAddressesTotal  ,
+    getAccountAssociatedAssets'         ,
+    getAccountAssociatedAssets          ,
+
+    -- Client.Cardano.Pools
+    listPools'                          ,
+    listPools                           ,
+    listPoolsExtended'                  ,
+    listPoolsExtended                   ,
+    listRetiredPools'                   ,
+    listRetiredPools                    ,
+    listRetiringPools'                  ,
+    listRetiringPools                   ,
+    getPool                             ,
+    getPoolHistory'                     ,
+    getPoolHistory                      ,
+    getPoolMetadata                     ,
+    getPoolRelays                       ,
+    getPoolDelegators'                  ,
+    getPoolDelegators                   ,
+    getPoolBlocks'                      ,
+    getPoolBlocks                       ,
+    getPoolUpdates'                     ,
+    getPoolUpdates                      ,
+
+    -- Client.Cardano.Metadata
+    getTxMetadataLabels'                ,
+    getTxMetadataLabels                 ,
+    getTxMetadataByLabelJSON'           ,
+    getTxMetadataByLabelJSON            ,
+    getTxMetadataByLabelCBOR'           ,
+    getTxMetadataByLabelCBOR            ,
+
+  ) where
+
+import           Control.Monad
+import           Data.Either
+import           Data.Maybe
+import           Data.Text
+import           GHC.Integer
+
+import           Blockfrost.Client                             (AccountDelegation,
+                                                                AccountHistory,
+                                                                AccountInfo,
+                                                                AccountMir,
+                                                                AccountRegistration,
+                                                                AccountReward,
+                                                                AccountWithdrawal,
+                                                                Address,
+                                                                AddressAssociated,
+                                                                AddressAssociatedTotal,
+                                                                AddressDetails,
+                                                                AddressInfo,
+                                                                AddressInfoExtended,
+                                                                AddressTransaction,
+                                                                AddressUtxo,
+                                                                Amount,
+                                                                AssetAddress,
+                                                                AssetDetails,
+                                                                AssetHistory,
+                                                                AssetId,
+                                                                AssetInfo,
+                                                                AssetTransaction,
+                                                                Block,
+                                                                BlockHash,
+                                                                BlockfrostError,
+                                                                CBORString,
+                                                                DatumHash,
+                                                                Epoch,
+                                                                EpochInfo,
+                                                                Genesis,
+                                                                Healthy,
+                                                                IPFSData,
+                                                                IPFSPin,
+                                                                IPFSPinChange,
+                                                                Metric, Network,
+                                                                NetworkEraSummary,
+                                                                NutlinkAddress,
+                                                                NutlinkAddressTicker,
+                                                                NutlinkTicker,
+                                                                Paged, PolicyId,
+                                                                Pool,
+                                                                PoolDelegator,
+                                                                PoolEpoch,
+                                                                PoolHistory,
+                                                                PoolId,
+                                                                PoolInfo,
+                                                                PoolMetadata,
+                                                                PoolRelay,
+                                                                PoolStakeDistribution,
+                                                                PoolUpdate,
+                                                                Project,
+                                                                ProtocolParams,
+                                                                Script,
+                                                                ScriptCBOR,
+                                                                ScriptDatum,
+                                                                ScriptDatumCBOR,
+                                                                ScriptHash,
+                                                                ScriptHashList,
+                                                                ScriptJSON,
+                                                                ScriptRedeemer,
+                                                                ServerTime,
+                                                                Slot, SortOrder,
+                                                                StakeDistribution,
+                                                                Transaction,
+                                                                TransactionDelegation,
+                                                                TransactionMetaCBOR,
+                                                                TransactionMetaJSON,
+                                                                TransactionMir,
+                                                                TransactionPoolRetiring,
+                                                                TransactionPoolUpdate,
+                                                                TransactionRedeemer,
+                                                                TransactionStake,
+                                                                TransactionUtxos,
+                                                                TransactionWithdrawal,
+                                                                TxHash, TxMeta,
+                                                                TxMetaCBOR,
+                                                                TxMetaJSON,
+                                                                URLVersion)
+import           Polysemy.Blockfrost.Effect.Blockfrost (Blockfrost,
+                                                                runBlockfrost)
+import qualified Polysemy.Blockfrost.Effect.Blockfrost as BF
+import           Polysemy
+import           Polysemy.Error
+
+
+-- Client
+getRoot                             :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r URLVersion
+getHealth                           :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r Healthy
+getClock                            :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r ServerTime
+getMetrics                          :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [Metric]
+getMetricsEndpoints                 :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [(Text, Metric)]
+
+-- Client.NutLink
+nutlinkListAddress                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r NutlinkAddress
+nutlinkListAddressTickers'          :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [NutlinkAddressTicker]
+nutlinkListAddressTickers           :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [NutlinkAddressTicker]
+nutlinkAddressTickers'              :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Text -> Paged -> SortOrder -> Sem r [NutlinkTicker]
+nutlinkAddressTickers               :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Text -> Sem r [NutlinkTicker]
+nutlinkTickers'                     :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Paged -> SortOrder -> Sem r [(Address, NutlinkTicker)]
+nutlinkTickers                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r [(Address, NutlinkTicker)]
+
+-- Client.IPFS
+ipfsGateway                         :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r IPFSData
+ipfsPin                             :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r IPFSPinChange
+ipfsListPins'                       :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [IPFSPin]
+ipfsListPins                        :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [IPFSPin]
+ipfsGetPin                          :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r IPFSPin
+ipfsRemovePin                       :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r IPFSPinChange
+
+-- Client.Cardano.Blocks
+getLatestBlock                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r Block
+getLatestBlockTxs'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [TxHash]
+getLatestBlockTxs                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [TxHash]
+getBlock                            :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Sem r Block
+getBlockSlot                        :: Member Blockfrost r => Member (Error BlockfrostError) r => Slot -> Sem r Block
+getBlockEpochSlot                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Slot -> Sem r Block
+getNextBlocks'                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Paged -> Sem r [Block]
+getNextBlocks                       :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Sem r [Block]
+getPreviousBlocks'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Paged -> Sem r [Block]
+getPreviousBlocks                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Sem r [Block]
+getBlockTxs'                        :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Paged -> SortOrder -> Sem r [TxHash]
+getBlockTxs                         :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Sem r [TxHash]
+getBlockAffectedAddresses'          :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Paged -> Sem r [(Address, [TxHash])]
+getBlockAffectedAddresses           :: Member Blockfrost r => Member (Error BlockfrostError) r => Either Integer BlockHash -> Sem r [(Address, [TxHash])]
+
+-- Client.Cardano.Network
+getNetworkInfo                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r Network
+getNetworkEras                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [NetworkEraSummary]
+
+-- Client.Cardano.Addresses
+getAddressInfo                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r AddressInfo
+getAddressInfoExtended              :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r AddressInfoExtended
+getAddressDetails                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r AddressDetails
+getAddressUtxos'                    :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AddressUtxo]
+getAddressUtxos                     :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AddressUtxo]
+getAddressUtxosAsset'               :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> AssetId-> Paged -> SortOrder -> Sem r [AddressUtxo]
+getAddressUtxosAsset                :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> AssetId -> Sem r [AddressUtxo]
+getAddressTransactions              :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AddressTransaction]
+
+-- Client.Cardano.Assets
+getAssets'                          :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [AssetInfo]
+getAssets                           :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [AssetInfo]
+getAssetDetails                     :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Sem r AssetDetails
+getAssetHistory'                    :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Paged -> SortOrder -> Sem r [AssetHistory]
+getAssetHistory                     :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Sem r [AssetHistory]
+getAssetTransactions'               :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Paged -> SortOrder -> Sem r [AssetTransaction]
+getAssetTransactions                :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Sem r [AssetTransaction]
+getAssetAddresses'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Paged -> SortOrder -> Sem r [AssetAddress]
+getAssetAddresses                   :: Member Blockfrost r => Member (Error BlockfrostError) r => AssetId -> Sem r [AssetAddress]
+getAssetsByPolicy'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => PolicyId -> Paged -> SortOrder -> Sem r [AssetInfo]
+getAssetsByPolicy                   :: Member Blockfrost r => Member (Error BlockfrostError) r => PolicyId -> Sem r [AssetInfo]
+
+-- Client.Cardano.Scripts
+listScripts'                        :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r ScriptHashList
+listScripts                         :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r ScriptHashList
+getScript                           :: Member Blockfrost r => Member (Error BlockfrostError) r => ScriptHash -> Sem r Script
+getScriptRedeemers'                 :: Member Blockfrost r => Member (Error BlockfrostError) r => ScriptHash -> Paged -> SortOrder -> Sem r [ScriptRedeemer]
+getScriptRedeemers                  :: Member Blockfrost r => Member (Error BlockfrostError) r => ScriptHash -> Sem r [ScriptRedeemer]
+getScriptDatum                      :: Member Blockfrost r => Member (Error BlockfrostError) r => DatumHash -> Sem r ScriptDatum
+getScriptDatumCBOR                  :: Member Blockfrost r => Member (Error BlockfrostError) r => DatumHash -> Sem r ScriptDatumCBOR
+getScriptJSON                       :: Member Blockfrost r => Member (Error BlockfrostError) r => ScriptHash -> Sem r ScriptJSON
+getScriptCBOR                       :: Member Blockfrost r => Member (Error BlockfrostError) r => ScriptHash -> Sem r ScriptCBOR
+
+-- Client.Cardano.Epochs
+getLatestEpoch                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r EpochInfo
+getLatestEpochProtocolParams        :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r ProtocolParams
+getEpoch                            :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r EpochInfo
+getNextEpochs'                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Paged -> Sem r [EpochInfo]
+getNextEpochs                       :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r [EpochInfo]
+getPreviousEpochs'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Paged -> Sem r [EpochInfo]
+getPreviousEpochs                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r [EpochInfo]
+getEpochStake'                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Paged -> Sem r [StakeDistribution]
+getEpochStake                       :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r [StakeDistribution]
+getEpochStakeByPool'                :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> PoolId -> Paged -> Sem r [PoolStakeDistribution]
+getEpochStakeByPool                 :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> PoolId -> Sem r [PoolStakeDistribution]
+getEpochBlocks'                     :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Paged -> SortOrder -> Sem r [BlockHash]
+getEpochBlocks                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r [BlockHash]
+getEpochBlocksByPool'               :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> PoolId -> Paged -> SortOrder -> Sem r [BlockHash]
+getEpochBlocksByPool                :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> PoolId -> Sem r [BlockHash]
+getEpochProtocolParams              :: Member Blockfrost r => Member (Error BlockfrostError) r => Epoch -> Sem r ProtocolParams
+
+-- Client.Cardano.Transactions
+getTx                               :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r Transaction
+getTxUtxos                          :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r TransactionUtxos
+getTxRedeemers                      :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionRedeemer]
+getTxStakes                         :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionStake]
+getTxDelegations                    :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionDelegation]
+getTxWithdrawals                    :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionWithdrawal]
+getTxMirs                           :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionMir]
+getTxPoolUpdates                    :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionPoolUpdate]
+getTxPoolRetiring                   :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionPoolRetiring]
+getTxMetadataJSON                   :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionMetaJSON]
+getTxMetadataCBOR                   :: Member Blockfrost r => Member (Error BlockfrostError) r => TxHash -> Sem r [TransactionMetaCBOR]
+submitTx                            :: Member Blockfrost r => Member (Error BlockfrostError) r => CBORString -> Sem r TxHash
+
+-- Client.Cardano.Ledger
+getLedgerGenesis                    :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r Genesis
+
+-- Client.Cardano.Accounts
+getAccount                          :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r AccountInfo
+getAccountRewards'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountReward]
+getAccountRewards                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountReward]
+getAccountHistory'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountHistory]
+getAccountHistory                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountHistory]
+getAccountDelegations'              :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountDelegation]
+getAccountDelegations               :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountDelegation]
+getAccountRegistrations'            :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountRegistration]
+getAccountRegistrations             :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountRegistration]
+getAccountWithdrawals'              :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountWithdrawal]
+getAccountWithdrawals               :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountWithdrawal]
+getAccountMirs'                     :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AccountMir]
+getAccountMirs                      :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AccountMir]
+getAccountAssociatedAddresses'      :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [AddressAssociated]
+getAccountAssociatedAddresses       :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [AddressAssociated]
+getAccountAssociatedAddressesTotal  :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r AddressAssociatedTotal
+getAccountAssociatedAssets'         :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Paged -> SortOrder -> Sem r [Amount]
+getAccountAssociatedAssets          :: Member Blockfrost r => Member (Error BlockfrostError) r => Address -> Sem r [Amount]
+
+-- Client.Cardano.Pools
+listPools'                          :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [PoolId]
+listPools                           :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [PoolId]
+listPoolsExtended'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [Pool]
+listPoolsExtended                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [Pool]
+listRetiredPools'                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [PoolEpoch]
+listRetiredPools                    :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [PoolEpoch]
+listRetiringPools'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [PoolEpoch]
+listRetiringPools                   :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [PoolEpoch]
+getPool                             :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r PoolInfo
+getPoolHistory'                     :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Paged -> SortOrder -> Sem r [PoolHistory]
+getPoolHistory                      :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r [PoolHistory]
+getPoolMetadata                     :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r (Maybe PoolMetadata)
+getPoolRelays                       :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r [PoolRelay]
+getPoolDelegators'                  :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Paged -> SortOrder -> Sem r [PoolDelegator]
+getPoolDelegators                   :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r [PoolDelegator]
+getPoolBlocks'                      :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Paged -> SortOrder -> Sem r [BlockHash]
+getPoolBlocks                       :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r [BlockHash]
+getPoolUpdates'                     :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Paged -> SortOrder -> Sem r [PoolUpdate]
+getPoolUpdates                      :: Member Blockfrost r => Member (Error BlockfrostError) r => PoolId -> Sem r [PoolUpdate]
+
+-- Client.Cardano.Metadata
+getTxMetadataLabels'                :: Member Blockfrost r => Member (Error BlockfrostError) r => Paged -> SortOrder -> Sem r [TxMeta]
+getTxMetadataLabels                 :: Member Blockfrost r => Member (Error BlockfrostError) r => Sem r [TxMeta]
+getTxMetadataByLabelJSON'           :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Paged -> SortOrder -> Sem r [TxMetaJSON]
+getTxMetadataByLabelJSON            :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r [TxMetaJSON]
+getTxMetadataByLabelCBOR'           :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Paged -> SortOrder -> Sem r [TxMetaCBOR]
+getTxMetadataByLabelCBOR            :: Member Blockfrost r => Member (Error BlockfrostError) r => Text -> Sem r [TxMetaCBOR]
+
+
+-- Client
+getRoot                                     = fromEither =<< BF.getRoot
+getHealth                                   = fromEither =<< BF.getHealth
+getClock                                    = fromEither =<< BF.getClock
+getMetrics                                  = fromEither =<< BF.getMetrics
+getMetricsEndpoints                         = fromEither =<< BF.getMetricsEndpoints
+
+-- Client.NutLink
+nutlinkListAddress                 a        = fromEither =<< BF.nutlinkListAddress                 a
+nutlinkListAddressTickers'         a b c    = fromEither =<< BF.nutlinkListAddressTickers'         a b c
+nutlinkListAddressTickers          a        = fromEither =<< BF.nutlinkListAddressTickers          a
+nutlinkAddressTickers'             a b c d  = fromEither =<< BF.nutlinkAddressTickers'             a b c d
+nutlinkAddressTickers              a b      = fromEither =<< BF.nutlinkAddressTickers              a b
+nutlinkTickers'                    a b c    = fromEither =<< BF.nutlinkTickers'                    a b c
+nutlinkTickers                     a        = fromEither =<< BF.nutlinkTickers                     a
+
+-- -- Client.IPFS
+ipfsGateway                        a        = fromEither =<< BF.ipfsGateway                        a
+ipfsPin                            a        = fromEither =<< BF.ipfsPin                            a
+ipfsListPins'                      a b      = fromEither =<< BF.ipfsListPins'                      a b
+ipfsListPins                                = fromEither =<< BF.ipfsListPins
+ipfsGetPin                         a        = fromEither =<< BF.ipfsGetPin                         a
+ipfsRemovePin                      a        = fromEither =<< BF.ipfsRemovePin                      a
+
+-- Client.Cardano.Blocks
+getLatestBlock                              = fromEither =<< BF.getLatestBlock
+getLatestBlockTxs'                 a b      = fromEither =<< BF.getLatestBlockTxs'                 a b
+getLatestBlockTxs                           = fromEither =<< BF.getLatestBlockTxs
+getBlock a                                  = fromEither =<< BF.getBlock a
+getBlockSlot                       a        = fromEither =<< BF.getBlockSlot                       a
+getBlockEpochSlot                  a b      = fromEither =<< BF.getBlockEpochSlot                  a b
+getNextBlocks'                     a b      = fromEither =<< BF.getNextBlocks'                     a b
+getNextBlocks                      a        = fromEither =<< BF.getNextBlocks                      a
+getPreviousBlocks'                 a b      = fromEither =<< BF.getPreviousBlocks'                 a b
+getPreviousBlocks                  a        = fromEither =<< BF.getPreviousBlocks                  a
+getBlockTxs'                       a b c    = fromEither =<< BF.getBlockTxs'                       a b c
+getBlockTxs                        a        = fromEither =<< BF.getBlockTxs                        a
+getBlockAffectedAddresses'         a b      = fromEither =<< BF.getBlockAffectedAddresses'         a b
+getBlockAffectedAddresses          a        = fromEither =<< BF.getBlockAffectedAddresses          a
+
+-- -- Client.Cardano.Network
+getNetworkInfo                              = fromEither =<< BF.getNetworkInfo
+getNetworkEras                              = fromEither =<< BF.getNetworkEras
+
+-- Client.Cardano.Addresses
+getAddressInfo                   a          = fromEither =<< BF.getAddressInfo                   a
+getAddressInfoExtended           a          = fromEither =<< BF.getAddressInfoExtended           a
+getAddressDetails                a          = fromEither =<< BF.getAddressDetails                a
+getAddressUtxos'                 a b c      = fromEither =<< BF.getAddressUtxos'                 a b c
+getAddressUtxos                  a          = fromEither =<< BF.getAddressUtxos                  a
+getAddressUtxosAsset'            a b c d    = fromEither =<< BF.getAddressUtxosAsset'            a b c d
+getAddressUtxosAsset             a b        = fromEither =<< BF.getAddressUtxosAsset             a b
+getAddressTransactions           a          = fromEither =<< BF.getAddressTransactions           a
+
+-- Client.Cardano.Assets
+getAssets'                         a b        = fromEither =<< BF.getAssets'                       a b
+getAssets                                     = fromEither =<< BF.getAssets
+getAssetDetails                    a          = fromEither =<< BF.getAssetDetails                  a
+getAssetHistory'                   a b c      = fromEither =<< BF.getAssetHistory'                 a b c
+getAssetHistory                    a          = fromEither =<< BF.getAssetHistory                  a
+getAssetTransactions'              a b c      = fromEither =<< BF.getAssetTransactions'            a b c
+getAssetTransactions               a          = fromEither =<< BF.getAssetTransactions             a
+getAssetAddresses'                 a b c      = fromEither =<< BF.getAssetAddresses'               a b c
+getAssetAddresses                  a          = fromEither =<< BF.getAssetAddresses                a
+getAssetsByPolicy'                 a b c      = fromEither =<< BF.getAssetsByPolicy'               a b c
+getAssetsByPolicy                  a          = fromEither =<< BF.getAssetsByPolicy                a
+
+-- Client.Cardano.Scripts
+listScripts'                       a b      = fromEither =<< BF.listScripts'                       a b
+listScripts                                 = fromEither =<< BF.listScripts
+getScript                          a        = fromEither =<< BF.getScript                          a
+getScriptRedeemers'                a b c    = fromEither =<< BF.getScriptRedeemers'                a b c
+getScriptRedeemers                 a        = fromEither =<< BF.getScriptRedeemers                 a
+getScriptDatum                     a        = fromEither =<< BF.getScriptDatum                     a
+getScriptDatumCBOR                 a        = fromEither =<< BF.getScriptDatumCBOR                 a
+getScriptJSON                      a        = fromEither =<< BF.getScriptJSON                      a
+getScriptCBOR                      a        = fromEither =<< BF.getScriptCBOR                      a
+
+-- Client.Cardano.Epochs
+getLatestEpoch                              = fromEither =<<  BF.getLatestEpoch
+getLatestEpochProtocolParams                = fromEither =<<  BF.getLatestEpochProtocolParams
+getEpoch                           a        = fromEither =<<  BF.getEpoch                           a
+getNextEpochs'                     a b      = fromEither =<<  BF.getNextEpochs'                     a b
+getNextEpochs                      a        = fromEither =<<  BF.getNextEpochs                      a
+getPreviousEpochs'                 a b      = fromEither =<<  BF.getPreviousEpochs'                 a b
+getPreviousEpochs                  a        = fromEither =<<  BF.getPreviousEpochs                  a
+getEpochStake'                     a b      = fromEither =<<  BF.getEpochStake'                     a b
+getEpochStake                      a        = fromEither =<<  BF.getEpochStake                      a
+getEpochStakeByPool'               a b c    = fromEither =<<  BF.getEpochStakeByPool'               a b c
+getEpochStakeByPool                a b      = fromEither =<<  BF.getEpochStakeByPool                a b
+getEpochBlocks'                    a b c    = fromEither =<<  BF.getEpochBlocks'                    a b c
+getEpochBlocks                     a        = fromEither =<<  BF.getEpochBlocks                     a
+getEpochBlocksByPool'              a b c d  = fromEither =<<  BF.getEpochBlocksByPool'              a b c d
+getEpochBlocksByPool               a b      = fromEither =<<  BF.getEpochBlocksByPool               a b
+getEpochProtocolParams             a        = fromEither =<<  BF.getEpochProtocolParams             a
+
+-- Client.Cardano.Transactions
+getTx                              a        = fromEither =<< BF.getTx                              a
+getTxUtxos                         a        = fromEither =<< BF.getTxUtxos                         a
+getTxRedeemers                     a        = fromEither =<< BF.getTxRedeemers                     a
+getTxStakes                        a        = fromEither =<< BF.getTxStakes                        a
+getTxDelegations                   a        = fromEither =<< BF.getTxDelegations                   a
+getTxWithdrawals                   a        = fromEither =<< BF.getTxWithdrawals                   a
+getTxMirs                          a        = fromEither =<< BF.getTxMirs                          a
+getTxPoolUpdates                   a        = fromEither =<< BF.getTxPoolUpdates                   a
+getTxPoolRetiring                  a        = fromEither =<< BF.getTxPoolRetiring                  a
+getTxMetadataJSON                  a        = fromEither =<< BF.getTxMetadataJSON                  a
+getTxMetadataCBOR                  a        = fromEither =<< BF.getTxMetadataCBOR                  a
+submitTx                           a        = fromEither =<< BF.submitTx                           a
+
+-- Client.Cardano.Ledger
+getLedgerGenesis                            = fromEither =<< BF.getLedgerGenesis
+
+-- Client.Cardano.Accounts
+getAccount                         a        = fromEither =<< BF.getAccount                         a
+getAccountRewards'                 a b c    = fromEither =<< BF.getAccountRewards'                 a b c
+getAccountRewards                  a        = fromEither =<< BF.getAccountRewards                  a
+getAccountHistory'                 a b c    = fromEither =<< BF.getAccountHistory'                 a b c
+getAccountHistory                  a        = fromEither =<< BF.getAccountHistory                  a
+getAccountDelegations'             a b c    = fromEither =<< BF.getAccountDelegations'             a b c
+getAccountDelegations              a        = fromEither =<< BF.getAccountDelegations              a
+getAccountRegistrations'           a b c    = fromEither =<< BF.getAccountRegistrations'           a b c
+getAccountRegistrations            a        = fromEither =<< BF.getAccountRegistrations            a
+getAccountWithdrawals'             a b c    = fromEither =<< BF.getAccountWithdrawals'             a b c
+getAccountWithdrawals              a        = fromEither =<< BF.getAccountWithdrawals              a
+getAccountMirs'                    a b c    = fromEither =<< BF.getAccountMirs'                    a b c
+getAccountMirs                     a        = fromEither =<< BF.getAccountMirs                     a
+getAccountAssociatedAddresses'     a b c    = fromEither =<< BF.getAccountAssociatedAddresses'     a b c
+getAccountAssociatedAddresses      a        = fromEither =<< BF.getAccountAssociatedAddresses      a
+getAccountAssociatedAddressesTotal a        = fromEither =<< BF.getAccountAssociatedAddressesTotal a
+getAccountAssociatedAssets'        a b c    = fromEither =<< BF.getAccountAssociatedAssets'        a b c
+getAccountAssociatedAssets         a        = fromEither =<< BF.getAccountAssociatedAssets         a
+
+-- Client.Cardano.Pools
+listPools'                         a b      = fromEither =<< BF.listPools'                         a b
+listPools                                   = fromEither =<< BF.listPools
+listPoolsExtended'                 a b      = fromEither =<< BF.listPoolsExtended'                 a b
+listPoolsExtended                           = fromEither =<< BF.listPoolsExtended
+listRetiredPools'                  a b      = fromEither =<< BF.listRetiredPools'                  a b
+listRetiredPools                            = fromEither =<< BF.listRetiredPools
+listRetiringPools'                 a b      = fromEither =<< BF.listRetiringPools'                 a b
+listRetiringPools                           = fromEither =<< BF.listRetiringPools
+getPool                            a        = fromEither =<< BF.getPool                            a
+getPoolHistory'                    a b c    = fromEither =<< BF.getPoolHistory'                    a b c
+getPoolHistory                     a        = fromEither =<< BF.getPoolHistory                     a
+getPoolMetadata                    a        = fromEither =<< BF.getPoolMetadata                    a
+getPoolRelays                      a        = fromEither =<< BF.getPoolRelays                      a
+getPoolDelegators'                 a b c    = fromEither =<< BF.getPoolDelegators'                 a b c
+getPoolDelegators                  a        = fromEither =<< BF.getPoolDelegators                  a
+getPoolBlocks'                     a b c    = fromEither =<< BF.getPoolBlocks'                     a b c
+getPoolBlocks                      a        = fromEither =<< BF.getPoolBlocks                      a
+getPoolUpdates'                    a b c    = fromEither =<< BF.getPoolUpdates'                    a b c
+getPoolUpdates                     a        = fromEither =<< BF.getPoolUpdates                     a
+
+-- Client.Cardano.Metadata
+getTxMetadataLabels'               a b      = fromEither =<< BF.getTxMetadataLabels'               a b
+getTxMetadataLabels                         = fromEither =<< BF.getTxMetadataLabels
+getTxMetadataByLabelJSON'          a b c    = fromEither =<< BF.getTxMetadataByLabelJSON'          a b c
+getTxMetadataByLabelJSON           a        = fromEither =<< BF.getTxMetadataByLabelJSON           a
+getTxMetadataByLabelCBOR'          a b c    = fromEither =<< BF.getTxMetadataByLabelCBOR'          a b c
+getTxMetadataByLabelCBOR           a        = fromEither =<< BF.getTxMetadataByLabelCBOR           a
diff --git a/src/Polysemy/Blockfrost/Client.hs b/src/Polysemy/Blockfrost/Client.hs
new file mode 100644
--- /dev/null
+++ b/src/Polysemy/Blockfrost/Client.hs
@@ -0,0 +1,9 @@
+module Polysemy.Blockfrost.Client
+  ( getRoot,
+    getHealth,
+    getClock,
+    getMetrics,
+    getMetricsEndpoints,
+  ) where
+
+import           Polysemy.Blockfrost.Api
diff --git a/src/Polysemy/Blockfrost/Effect/Blockfrost.hs b/src/Polysemy/Blockfrost/Effect/Blockfrost.hs
new file mode 100644
--- /dev/null
+++ b/src/Polysemy/Blockfrost/Effect/Blockfrost.hs
@@ -0,0 +1,377 @@
+{-# LANGUAGE DataKinds           #-}
+{-# LANGUAGE DeriveFunctor       #-}
+{-# LANGUAGE FlexibleContexts    #-}
+{-# LANGUAGE GADTs               #-}
+{-# LANGUAGE LambdaCase          #-}
+{-# LANGUAGE PolyKinds           #-}
+{-# LANGUAGE RankNTypes          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving  #-}
+{-# LANGUAGE TemplateHaskell     #-}
+{-# LANGUAGE TypeApplications    #-}
+{-# LANGUAGE TypeFamilies        #-}
+{-# LANGUAGE TypeOperators       #-}
+{-# LANGUAGE UnicodeSyntax       #-}
+
+{- HLINT ignore "Redundant $" -}
+
+module Polysemy.Blockfrost.Effect.Blockfrost where
+
+import           Data.Either
+import           Data.Function              (($))
+import           Data.Maybe
+import           Data.Text                  (Text)
+import           GHC.Integer
+import           System.IO                  (IO)
+
+import           Blockfrost.Client          (BlockfrostError, Project)
+import qualified Blockfrost.Client          as BF
+import           Blockfrost.Types
+import           Blockfrost.Util.Pagination
+import           Blockfrost.Util.Sorting
+import           Polysemy
+import           Polysemy.Reader
+
+data Blockfrost m a where
+
+  -- Client
+  GetRoot :: Blockfrost m (Either BlockfrostError URLVersion)
+  GetHealth :: Blockfrost m (Either BlockfrostError Healthy)
+  GetClock :: Blockfrost m (Either BlockfrostError ServerTime)
+  GetMetrics :: Blockfrost m (Either BlockfrostError [Metric])
+  GetMetricsEndpoints :: Blockfrost m (Either BlockfrostError [(Text, Metric)])
+
+  -- Client.NutLink
+  NutlinkListAddress :: Address -> Blockfrost m (Either BlockfrostError NutlinkAddress)
+  NutlinkListAddressTickers' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [NutlinkAddressTicker])
+  NutlinkListAddressTickers :: Address -> Blockfrost m (Either BlockfrostError [NutlinkAddressTicker])
+  NutlinkAddressTickers' :: Address -> Text -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [NutlinkTicker])
+  NutlinkAddressTickers :: Address -> Text -> Blockfrost m (Either BlockfrostError [NutlinkTicker])
+  NutlinkTickers' :: Text -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [(Address, NutlinkTicker)])
+  NutlinkTickers :: Text -> Blockfrost m (Either BlockfrostError [(Address, NutlinkTicker)])
+
+  -- Client.IPFS
+  IpfsGateway :: Text -> Blockfrost m (Either BlockfrostError IPFSData)
+  IpfsPin :: Text -> Blockfrost m (Either BlockfrostError IPFSPinChange)
+  IpfsListPins' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [IPFSPin])
+  IpfsListPins :: Blockfrost m (Either BlockfrostError [IPFSPin])
+  IpfsGetPin :: Text -> Blockfrost m (Either BlockfrostError IPFSPin)
+  IpfsRemovePin :: Text -> Blockfrost m (Either BlockfrostError IPFSPinChange)
+
+  -- Client.Cardano.Blocks
+  GetLatestBlock :: Blockfrost m (Either BlockfrostError Block)
+  GetLatestBlockTxs' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [TxHash])
+  GetLatestBlockTxs :: Blockfrost m (Either BlockfrostError [TxHash])
+  GetBlock :: Either Integer BlockHash -> Blockfrost m (Either BlockfrostError Block)
+  GetBlockSlot :: Slot -> Blockfrost m (Either BlockfrostError Block)
+  GetBlockEpochSlot :: Epoch -> Slot -> Blockfrost m (Either BlockfrostError Block)
+  GetNextBlocks' :: Either Integer BlockHash -> Paged -> Blockfrost m (Either BlockfrostError [Block])
+  GetNextBlocks :: Either Integer BlockHash -> Blockfrost m (Either BlockfrostError [Block])
+  GetPreviousBlocks' :: Either Integer BlockHash -> Paged -> Blockfrost m (Either BlockfrostError [Block])
+  GetPreviousBlocks :: Either Integer BlockHash -> Blockfrost m (Either BlockfrostError [Block])
+  GetBlockTxs' :: Either Integer BlockHash -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [TxHash])
+  GetBlockTxs :: Either Integer BlockHash -> Blockfrost m (Either BlockfrostError [TxHash])
+  GetBlockAffectedAddresses' :: Either Integer BlockHash -> Paged -> Blockfrost m (Either BlockfrostError [(Address, [TxHash])])
+  GetBlockAffectedAddresses :: Either Integer BlockHash -> Blockfrost m (Either BlockfrostError [(Address, [TxHash])])
+
+  -- Client.Cardano.Network
+  GetNetworkInfo :: Blockfrost m (Either BlockfrostError Network)
+  GetNetworkEras :: Blockfrost m (Either BlockfrostError [NetworkEraSummary])
+
+  -- Client.Cardano.Addresses
+  GetAddressInfo :: Address -> Blockfrost m (Either BlockfrostError AddressInfo)
+  GetAddressInfoExtended :: Address -> Blockfrost m (Either BlockfrostError AddressInfoExtended)
+  GetAddressDetails :: Address -> Blockfrost m (Either BlockfrostError AddressDetails)
+  GetAddressUtxos' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AddressUtxo])
+  GetAddressUtxos :: Address -> Blockfrost m (Either BlockfrostError [AddressUtxo])
+  GetAddressUtxosAsset' :: Address -> AssetId-> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AddressUtxo])
+  GetAddressUtxosAsset :: Address -> AssetId -> Blockfrost m (Either BlockfrostError [AddressUtxo])
+  GetAddressTransactions :: Address -> Blockfrost m (Either BlockfrostError [AddressTransaction])
+
+  -- Client.Cardano.Assets
+  GetAssets' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AssetInfo])
+  GetAssets :: Blockfrost m (Either BlockfrostError [AssetInfo])
+  GetAssetDetails :: AssetId -> Blockfrost m (Either BlockfrostError AssetDetails)
+  GetAssetHistory' :: AssetId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AssetHistory])
+  GetAssetHistory :: AssetId -> Blockfrost m (Either BlockfrostError [AssetHistory])
+  GetAssetTransactions' :: AssetId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AssetTransaction])
+  GetAssetTransactions :: AssetId -> Blockfrost m (Either BlockfrostError [AssetTransaction])
+  GetAssetAddresses' :: AssetId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AssetAddress])
+  GetAssetAddresses :: AssetId -> Blockfrost m (Either BlockfrostError [AssetAddress])
+  GetAssetsByPolicy' :: PolicyId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AssetInfo])
+  GetAssetsByPolicy :: PolicyId -> Blockfrost m (Either BlockfrostError [AssetInfo])
+
+  -- Client.Cardano.Scripts
+  ListScripts' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError ScriptHashList)
+  ListScripts :: Blockfrost m (Either BlockfrostError ScriptHashList)
+  GetScript :: ScriptHash -> Blockfrost m (Either BlockfrostError Script)
+  GetScriptRedeemers' :: ScriptHash -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [ScriptRedeemer])
+  GetScriptRedeemers :: ScriptHash -> Blockfrost m (Either BlockfrostError [ScriptRedeemer])
+  GetScriptDatum :: DatumHash -> Blockfrost m (Either BlockfrostError ScriptDatum)
+  GetScriptDatumCBOR :: DatumHash -> Blockfrost m (Either BlockfrostError ScriptDatumCBOR)
+  GetScriptJSON :: ScriptHash -> Blockfrost m (Either BlockfrostError ScriptJSON)
+  GetScriptCBOR :: ScriptHash -> Blockfrost m (Either BlockfrostError ScriptCBOR)
+
+  -- Client.Cardano.Epochs
+  GetLatestEpoch :: Blockfrost m (Either BlockfrostError EpochInfo)
+  GetLatestEpochProtocolParams :: Blockfrost m (Either BlockfrostError ProtocolParams)
+  GetEpoch :: Epoch -> Blockfrost m (Either BlockfrostError EpochInfo)
+  GetNextEpochs' :: Epoch -> Paged -> Blockfrost m (Either BlockfrostError [EpochInfo])
+  GetNextEpochs :: Epoch -> Blockfrost m (Either BlockfrostError [EpochInfo])
+  GetPreviousEpochs' :: Epoch -> Paged -> Blockfrost m (Either BlockfrostError [EpochInfo])
+  GetPreviousEpochs :: Epoch -> Blockfrost m (Either BlockfrostError [EpochInfo])
+  GetEpochStake' :: Epoch -> Paged -> Blockfrost m (Either BlockfrostError [StakeDistribution])
+  GetEpochStake :: Epoch -> Blockfrost m (Either BlockfrostError [StakeDistribution])
+  GetEpochStakeByPool' :: Epoch -> PoolId -> Paged -> Blockfrost m (Either BlockfrostError [PoolStakeDistribution])
+  GetEpochStakeByPool :: Epoch -> PoolId -> Blockfrost m (Either BlockfrostError [PoolStakeDistribution])
+  GetEpochBlocks' :: Epoch -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetEpochBlocks :: Epoch -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetEpochBlocksByPool' :: Epoch -> PoolId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetEpochBlocksByPool :: Epoch -> PoolId -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetEpochProtocolParams :: Epoch -> Blockfrost m (Either BlockfrostError ProtocolParams)
+
+  -- Client.Cardano.Transactions
+  GetTx :: TxHash -> Blockfrost m (Either BlockfrostError Transaction)
+  GetTxUtxos :: TxHash -> Blockfrost m (Either BlockfrostError TransactionUtxos)
+  GetTxRedeemers :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionRedeemer])
+  GetTxStakes :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionStake])
+  GetTxDelegations :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionDelegation])
+  GetTxWithdrawals :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionWithdrawal])
+  GetTxMirs :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionMir])
+  GetTxPoolUpdates :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionPoolUpdate])
+  GetTxPoolRetiring :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionPoolRetiring])
+  GetTxMetadataJSON :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionMetaJSON])
+  GetTxMetadataCBOR :: TxHash -> Blockfrost m (Either BlockfrostError [TransactionMetaCBOR])
+  SubmitTx :: CBORString -> Blockfrost m (Either BlockfrostError TxHash)
+
+  -- Client.Cardano.Ledger
+  GetLedgerGenesis :: Blockfrost m (Either BlockfrostError Genesis)
+
+  -- Client.Cardano.Accounts
+  GetAccount :: Address -> Blockfrost m (Either BlockfrostError AccountInfo)
+  GetAccountRewards' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountReward])
+  GetAccountRewards :: Address -> Blockfrost m (Either BlockfrostError [AccountReward])
+  GetAccountHistory' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountHistory])
+  GetAccountHistory :: Address -> Blockfrost m (Either BlockfrostError [AccountHistory])
+  GetAccountDelegations' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountDelegation])
+  GetAccountDelegations :: Address -> Blockfrost m (Either BlockfrostError [AccountDelegation])
+  GetAccountRegistrations' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountRegistration])
+  GetAccountRegistrations :: Address -> Blockfrost m (Either BlockfrostError [AccountRegistration])
+  GetAccountWithdrawals' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountWithdrawal])
+  GetAccountWithdrawals :: Address -> Blockfrost m (Either BlockfrostError [AccountWithdrawal])
+  GetAccountMirs' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AccountMir])
+  GetAccountMirs :: Address -> Blockfrost m (Either BlockfrostError [AccountMir])
+  GetAccountAssociatedAddresses' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [AddressAssociated])
+  GetAccountAssociatedAddresses :: Address -> Blockfrost m (Either BlockfrostError [AddressAssociated])
+  GetAccountAssociatedAddressesTotal :: Address -> Blockfrost m (Either BlockfrostError AddressAssociatedTotal)
+  GetAccountAssociatedAssets' :: Address -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [Amount])
+  GetAccountAssociatedAssets :: Address -> Blockfrost m (Either BlockfrostError [Amount])
+
+  -- Client.Cardano.Pools
+  ListPools' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolId])
+  ListPools :: Blockfrost m (Either BlockfrostError [PoolId])
+  ListPoolsExtended' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [Pool])
+  ListPoolsExtended :: Blockfrost m (Either BlockfrostError [Pool])
+  ListRetiredPools' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolEpoch])
+  ListRetiredPools :: Blockfrost m (Either BlockfrostError [PoolEpoch])
+  ListRetiringPools' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolEpoch])
+  ListRetiringPools :: Blockfrost m (Either BlockfrostError [PoolEpoch])
+  GetPool :: PoolId -> Blockfrost m (Either BlockfrostError PoolInfo)
+  GetPoolHistory' :: PoolId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolHistory])
+  GetPoolHistory :: PoolId -> Blockfrost m (Either BlockfrostError [PoolHistory])
+  GetPoolMetadata :: PoolId -> Blockfrost m (Either BlockfrostError (Maybe PoolMetadata))
+  GetPoolRelays :: PoolId -> Blockfrost m (Either BlockfrostError [PoolRelay])
+  GetPoolDelegators' :: PoolId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolDelegator])
+  GetPoolDelegators :: PoolId -> Blockfrost m (Either BlockfrostError [PoolDelegator])
+  GetPoolBlocks' :: PoolId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetPoolBlocks :: PoolId -> Blockfrost m (Either BlockfrostError [BlockHash])
+  GetPoolUpdates' :: PoolId -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [PoolUpdate])
+  GetPoolUpdates :: PoolId -> Blockfrost m (Either BlockfrostError [PoolUpdate])
+
+  -- Client.Cardano.Metadata
+  GetTxMetadataLabels' :: Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [TxMeta])
+  GetTxMetadataLabels :: Blockfrost m (Either BlockfrostError [TxMeta])
+  GetTxMetadataByLabelJSON' :: Text -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [TxMetaJSON])
+  GetTxMetadataByLabelJSON :: Text -> Blockfrost m (Either BlockfrostError [TxMetaJSON])
+  GetTxMetadataByLabelCBOR' :: Text -> Paged -> SortOrder -> Blockfrost m (Either BlockfrostError [TxMetaCBOR])
+  GetTxMetadataByLabelCBOR :: Text -> Blockfrost m (Either BlockfrostError [TxMetaCBOR])
+
+makeSem ''Blockfrost
+
+callBlockfrost :: ()
+  => Member (Reader Project) r
+  => Member (Embed IO) r
+  => BF.BlockfrostClientT IO b
+  -> Sem r (Either BlockfrostError b)
+callBlockfrost f = do
+  project <- ask @Project
+  embed (BF.runBlockfrost project f)
+
+runBlockfrost :: ()
+  => Member (Embed IO) r
+  => Member (Reader Project) r
+  => Sem (Blockfrost ': r) a
+  -> Sem r a
+runBlockfrost =
+  interpret $ \case
+    -- Client
+    GetRoot                                     -> callBlockfrost $ BF.getRoot
+    GetHealth                                   -> callBlockfrost $ BF.getHealth
+    GetClock                                    -> callBlockfrost $ BF.getClock
+    GetMetrics                                  -> callBlockfrost $ BF.getMetrics
+    GetMetricsEndpoints                         -> callBlockfrost $ BF.getMetricsEndpoints
+
+    -- Client.NutLink
+    NutlinkListAddress                  a       -> callBlockfrost $ BF.nutlinkListAddress                 a
+    NutlinkListAddressTickers'          a b c   -> callBlockfrost $ BF.nutlinkListAddressTickers'         a b c
+    NutlinkListAddressTickers           a       -> callBlockfrost $ BF.nutlinkListAddressTickers          a
+    NutlinkAddressTickers'              a b c d -> callBlockfrost $ BF.nutlinkAddressTickers'             a b c d
+    NutlinkAddressTickers               a b     -> callBlockfrost $ BF.nutlinkAddressTickers              a b
+    NutlinkTickers'                     a b c   -> callBlockfrost $ BF.nutlinkTickers'                    a b c
+    NutlinkTickers                      a       -> callBlockfrost $ BF.nutlinkTickers                     a
+
+    -- -- Client.IPFS
+    IpfsGateway                         a       -> callBlockfrost $ BF.ipfsGateway                        a
+    IpfsPin                             a       -> callBlockfrost $ BF.ipfsPin                            a
+    IpfsListPins'                       a b     -> callBlockfrost $ BF.ipfsListPins'                      a b
+    IpfsListPins                                -> callBlockfrost $ BF.ipfsListPins
+    IpfsGetPin                          a       -> callBlockfrost $ BF.ipfsGetPin                         a
+    IpfsRemovePin                       a       -> callBlockfrost $ BF.ipfsRemovePin                      a
+
+    -- Client.Cardano.Blocks
+    GetLatestBlock                              -> callBlockfrost $ BF.getLatestBlock
+    GetLatestBlockTxs'                  a b     -> callBlockfrost $ BF.getLatestBlockTxs'                 a b
+    GetLatestBlockTxs                           -> callBlockfrost $ BF.getLatestBlockTxs
+    GetBlock                            a       -> callBlockfrost $ BF.getBlock a
+    GetBlockSlot                        a       -> callBlockfrost $ BF.getBlockSlot                       a
+    GetBlockEpochSlot                   a b     -> callBlockfrost $ BF.getBlockEpochSlot                  a b
+    GetNextBlocks'                      a b     -> callBlockfrost $ BF.getNextBlocks'                     a b
+    GetNextBlocks                       a       -> callBlockfrost $ BF.getNextBlocks                      a
+    GetPreviousBlocks'                  a b     -> callBlockfrost $ BF.getPreviousBlocks'                 a b
+    GetPreviousBlocks                   a       -> callBlockfrost $ BF.getPreviousBlocks                  a
+    GetBlockTxs'                        a b c   -> callBlockfrost $ BF.getBlockTxs'                       a b c
+    GetBlockTxs                         a       -> callBlockfrost $ BF.getBlockTxs                        a
+    GetBlockAffectedAddresses'          a b     -> callBlockfrost $ BF.getBlockAffectedAddresses'         a b
+    GetBlockAffectedAddresses           a       -> callBlockfrost $ BF.getBlockAffectedAddresses          a
+
+    -- -- Client.Cardano.Network
+    GetNetworkInfo                              -> callBlockfrost $ BF.getNetworkInfo
+    GetNetworkEras                              -> callBlockfrost $ BF.getNetworkEras
+
+    -- Client.Cardano.Addresses
+    GetAddressInfo                      a       -> callBlockfrost $ BF.getAddressInfo                   a
+    GetAddressInfoExtended              a       -> callBlockfrost $ BF.getAddressInfoExtended           a
+    GetAddressDetails                   a       -> callBlockfrost $ BF.getAddressDetails                a
+    GetAddressUtxos'                    a b c   -> callBlockfrost $ BF.getAddressUtxos'                 a b c
+    GetAddressUtxos                     a       -> callBlockfrost $ BF.getAddressUtxos                  a
+    GetAddressUtxosAsset'               a b c d -> callBlockfrost $ BF.getAddressUtxosAsset'            a b c d
+    GetAddressUtxosAsset                a b     -> callBlockfrost $ BF.getAddressUtxosAsset             a b
+    GetAddressTransactions              a       -> callBlockfrost $ BF.getAddressTransactions           a
+
+    -- Client.Cardano.Assets
+    GetAssets'                          a b     -> callBlockfrost $ BF.getAssets'                       a b
+    GetAssets                                   -> callBlockfrost $ BF.getAssets
+    GetAssetDetails                     a       -> callBlockfrost $ BF.getAssetDetails                  a
+    GetAssetHistory'                    a b c   -> callBlockfrost $ BF.getAssetHistory'                 a b c
+    GetAssetHistory                     a       -> callBlockfrost $ BF.getAssetHistory                  a
+    GetAssetTransactions'               a b c   -> callBlockfrost $ BF.getAssetTransactions'            a b c
+    GetAssetTransactions                a       -> callBlockfrost $ BF.getAssetTransactions             a
+    GetAssetAddresses'                  a b c   -> callBlockfrost $ BF.getAssetAddresses'               a b c
+    GetAssetAddresses                   a       -> callBlockfrost $ BF.getAssetAddresses                a
+    GetAssetsByPolicy'                  a b c   -> callBlockfrost $ BF.getAssetsByPolicy'               a b c
+    GetAssetsByPolicy                   a       -> callBlockfrost $ BF.getAssetsByPolicy                a
+
+    -- Client.Cardano.Scripts
+    ListScripts'                        a b     -> callBlockfrost $ BF.listScripts'                       a b
+    ListScripts                                 -> callBlockfrost $ BF.listScripts
+    GetScript                           a       -> callBlockfrost $ BF.getScript                          a
+    GetScriptRedeemers'                 a b c   -> callBlockfrost $ BF.getScriptRedeemers'                a b c
+    GetScriptRedeemers                  a       -> callBlockfrost $ BF.getScriptRedeemers                 a
+    GetScriptDatum                      a       -> callBlockfrost $ BF.getScriptDatum                     a
+    GetScriptDatumCBOR                  a       -> callBlockfrost $ BF.getScriptDatumCBOR                 a
+    GetScriptJSON                       a       -> callBlockfrost $ BF.getScriptJSON                      a
+    GetScriptCBOR                       a       -> callBlockfrost $ BF.getScriptCBOR                      a
+
+    -- Client.Cardano.Epochs
+    GetLatestEpoch                              -> callBlockfrost $ BF.getLatestEpoch
+    GetLatestEpochProtocolParams                -> callBlockfrost $ BF.getLatestEpochProtocolParams
+    GetEpoch                            a       -> callBlockfrost $ BF.getEpoch                           a
+    GetNextEpochs'                      a b     -> callBlockfrost $ BF.getNextEpochs'                     a b
+    GetNextEpochs                       a       -> callBlockfrost $ BF.getNextEpochs                      a
+    GetPreviousEpochs'                  a b     -> callBlockfrost $ BF.getPreviousEpochs'                 a b
+    GetPreviousEpochs                   a       -> callBlockfrost $ BF.getPreviousEpochs                  a
+    GetEpochStake'                      a b     -> callBlockfrost $ BF.getEpochStake'                     a b
+    GetEpochStake                       a       -> callBlockfrost $ BF.getEpochStake                      a
+    GetEpochStakeByPool'                a b c   -> callBlockfrost $ BF.getEpochStakeByPool'               a b c
+    GetEpochStakeByPool                 a b     -> callBlockfrost $ BF.getEpochStakeByPool                a b
+    GetEpochBlocks'                     a b c   -> callBlockfrost $ BF.getEpochBlocks'                    a b c
+    GetEpochBlocks                      a       -> callBlockfrost $ BF.getEpochBlocks                     a
+    GetEpochBlocksByPool'               a b c d -> callBlockfrost $ BF.getEpochBlocksByPool'              a b c d
+    GetEpochBlocksByPool                a b     -> callBlockfrost $ BF.getEpochBlocksByPool               a b
+    GetEpochProtocolParams              a       -> callBlockfrost $ BF.getEpochProtocolParams             a
+
+    -- Client.Cardano.Transactions
+    GetTx                               a       -> callBlockfrost $ BF.getTx                              a
+    GetTxUtxos                          a       -> callBlockfrost $ BF.getTxUtxos                         a
+    GetTxRedeemers                      a       -> callBlockfrost $ BF.getTxRedeemers                     a
+    GetTxStakes                         a       -> callBlockfrost $ BF.getTxStakes                        a
+    GetTxDelegations                    a       -> callBlockfrost $ BF.getTxDelegations                   a
+    GetTxWithdrawals                    a       -> callBlockfrost $ BF.getTxWithdrawals                   a
+    GetTxMirs                           a       -> callBlockfrost $ BF.getTxMirs                          a
+    GetTxPoolUpdates                    a       -> callBlockfrost $ BF.getTxPoolUpdates                   a
+    GetTxPoolRetiring                   a       -> callBlockfrost $ BF.getTxPoolRetiring                  a
+    GetTxMetadataJSON                   a       -> callBlockfrost $ BF.getTxMetadataJSON                  a
+    GetTxMetadataCBOR                   a       -> callBlockfrost $ BF.getTxMetadataCBOR                  a
+    SubmitTx                            a       -> callBlockfrost $ BF.submitTx                           a
+
+    -- Client.Cardano.Ledger
+    GetLedgerGenesis                            -> callBlockfrost $ BF.getLedgerGenesis
+
+    -- Client.Cardano.Accounts
+    GetAccount                          a       -> callBlockfrost $ BF.getAccount                         a
+    GetAccountRewards'                  a b c   -> callBlockfrost $ BF.getAccountRewards'                 a b c
+    GetAccountRewards                   a       -> callBlockfrost $ BF.getAccountRewards                  a
+    GetAccountHistory'                  a b c   -> callBlockfrost $ BF.getAccountHistory'                 a b c
+    GetAccountHistory                   a       -> callBlockfrost $ BF.getAccountHistory                  a
+    GetAccountDelegations'              a b c   -> callBlockfrost $ BF.getAccountDelegations'             a b c
+    GetAccountDelegations               a       -> callBlockfrost $ BF.getAccountDelegations              a
+    GetAccountRegistrations'            a b c   -> callBlockfrost $ BF.getAccountRegistrations'           a b c
+    GetAccountRegistrations             a       -> callBlockfrost $ BF.getAccountRegistrations            a
+    GetAccountWithdrawals'              a b c   -> callBlockfrost $ BF.getAccountWithdrawals'             a b c
+    GetAccountWithdrawals               a       -> callBlockfrost $ BF.getAccountWithdrawals              a
+    GetAccountMirs'                     a b c   -> callBlockfrost $ BF.getAccountMirs'                    a b c
+    GetAccountMirs                      a       -> callBlockfrost $ BF.getAccountMirs                     a
+    GetAccountAssociatedAddresses'      a b c   -> callBlockfrost $ BF.getAccountAssociatedAddresses'     a b c
+    GetAccountAssociatedAddresses       a       -> callBlockfrost $ BF.getAccountAssociatedAddresses      a
+    GetAccountAssociatedAddressesTotal  a       -> callBlockfrost $ BF.getAccountAssociatedAddressesTotal a
+    GetAccountAssociatedAssets'         a b c   -> callBlockfrost $ BF.getAccountAssociatedAssets'        a b c
+    GetAccountAssociatedAssets          a       -> callBlockfrost $ BF.getAccountAssociatedAssets         a
+
+    -- Client.Cardano.Pools
+    ListPools'                          a b     -> callBlockfrost $ BF.listPools'                         a b
+    ListPools                                   -> callBlockfrost $ BF.listPools
+    ListPoolsExtended'                  a b     -> callBlockfrost $ BF.listPoolsExtended'                 a b
+    ListPoolsExtended                           -> callBlockfrost $ BF.listPoolsExtended
+    ListRetiredPools'                   a b     -> callBlockfrost $ BF.listRetiredPools'                  a b
+    ListRetiredPools                            -> callBlockfrost $ BF.listRetiredPools
+    ListRetiringPools'                  a b     -> callBlockfrost $ BF.listRetiringPools'                 a b
+    ListRetiringPools                           -> callBlockfrost $ BF.listRetiringPools
+    GetPool                             a       -> callBlockfrost $ BF.getPool                            a
+    GetPoolHistory'                     a b c   -> callBlockfrost $ BF.getPoolHistory'                    a b c
+    GetPoolHistory                      a       -> callBlockfrost $ BF.getPoolHistory                     a
+    GetPoolMetadata                     a       -> callBlockfrost $ BF.getPoolMetadata                    a
+    GetPoolRelays                       a       -> callBlockfrost $ BF.getPoolRelays                      a
+    GetPoolDelegators'                  a b c   -> callBlockfrost $ BF.getPoolDelegators'                 a b c
+    GetPoolDelegators                   a       -> callBlockfrost $ BF.getPoolDelegators                  a
+    GetPoolBlocks'                      a b c   -> callBlockfrost $ BF.getPoolBlocks'                     a b c
+    GetPoolBlocks                       a       -> callBlockfrost $ BF.getPoolBlocks                      a
+    GetPoolUpdates'                     a b c   -> callBlockfrost $ BF.getPoolUpdates'                    a b c
+    GetPoolUpdates                      a       -> callBlockfrost $ BF.getPoolUpdates                     a
+
+    -- Client.Cardano.Metadata
+    GetTxMetadataLabels'                a b     -> callBlockfrost $ BF.getTxMetadataLabels'               a b
+    GetTxMetadataLabels                         -> callBlockfrost $ BF.getTxMetadataLabels
+    GetTxMetadataByLabelJSON'           a b c   -> callBlockfrost $ BF.getTxMetadataByLabelJSON'          a b c
+    GetTxMetadataByLabelJSON            a       -> callBlockfrost $ BF.getTxMetadataByLabelJSON           a
+    GetTxMetadataByLabelCBOR'           a b c   -> callBlockfrost $ BF.getTxMetadataByLabelCBOR'          a b c
+    GetTxMetadataByLabelCBOR            a       -> callBlockfrost $ BF.getTxMetadataByLabelCBOR           a
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF tasty-discover #-}
