airalab/hs-web3

Web3 API for Haskell

Haskell

198

528 commits

updated Aug 27, 2026

See the code

README

Web3 API for Haskell

This library implements Haskell API client for popular Web3 platforms.

Documentation Status CI Hackage Stackage Code Triagers

Install

stack install web3

Usage

{-# LANGUAGE OverloadedStrings #-}

module Main where

-- Basic imports
import           Network.Ethereum
import           Network.Web3

-- Eth API support
import qualified Network.Ethereum.Api.Eth   as Eth
import           Network.Ethereum.Api.Types

-- ENS support
import qualified Network.Ethereum.Ens       as Ens

-- Lens to simple param setting
import           Lens.Micro                 ((.~))

main :: IO ()
main = do
    -- Use default provider on http://localhost:8545
    ret <- runWeb3 $ do

        -- Get address of default account
        me <- head <$> Eth.accounts

        -- Get balance of default account on latest block
        myBalance <- Eth.getBalance me Latest

        -- Get half of balance
        let halfBalance = fromWei (myBalance / 2)

        -- Use default account
        withAccount () $ do
            -- Get Ethereum address via ENS
            alice <- Ens.resolve "alice.address.on.eth"
            bob   <- Ens.resolve "bob.address.on.eth"

            -- Send transaction with value
            withParam (value .~ halfBalance) $ do

                -- Send transaction to alice account
                withParam (to .~ alice) $ send ()

                -- Send transaction to bob account
                withParam (to .~ bob) $ send ()

        -- Return sended value
        return halfBalance

    -- Web3 error handling
    case ret of
        Left e  -> error $ show e
        Right v -> print (v :: Ether)  -- Print returned value in ethers

Read more in the documentation on ReadTheDocs.

License

ethereum
haskell
ipfs
kusama
polkadot
web3

Contributors

akru

327 commits

aupiff

45 commits

amany9000

44 commits

iostat

32 commits

airalab/hs-web3

Web3 API for Haskell

Haskell

198

528 commits

updated Aug 27, 2026

See the code

README

Web3 API for Haskell

This library implements Haskell API client for popular Web3 platforms.

Documentation Status CI Hackage Stackage Code Triagers

Install

stack install web3

Usage

{-# LANGUAGE OverloadedStrings #-}

module Main where

-- Basic imports
import           Network.Ethereum
import           Network.Web3

-- Eth API support
import qualified Network.Ethereum.Api.Eth   as Eth
import           Network.Ethereum.Api.Types

-- ENS support
import qualified Network.Ethereum.Ens       as Ens

-- Lens to simple param setting
import           Lens.Micro                 ((.~))

main :: IO ()
main = do
    -- Use default provider on http://localhost:8545
    ret <- runWeb3 $ do

        -- Get address of default account
        me <- head <$> Eth.accounts

        -- Get balance of default account on latest block
        myBalance <- Eth.getBalance me Latest

        -- Get half of balance
        let halfBalance = fromWei (myBalance / 2)

        -- Use default account
        withAccount () $ do
            -- Get Ethereum address via ENS
            alice <- Ens.resolve "alice.address.on.eth"
            bob   <- Ens.resolve "bob.address.on.eth"

            -- Send transaction with value
            withParam (value .~ halfBalance) $ do

                -- Send transaction to alice account
                withParam (to .~ alice) $ send ()

                -- Send transaction to bob account
                withParam (to .~ bob) $ send ()

        -- Return sended value
        return halfBalance

    -- Web3 error handling
    case ret of
        Left e  -> error $ show e
        Right v -> print (v :: Ether)  -- Print returned value in ethers

Read more in the documentation on ReadTheDocs.

License

ethereum
haskell
ipfs
kusama
polkadot
web3

Contributors

akru

327 commits

aupiff

45 commits

amany9000

44 commits

iostat

32 commits

Languages

Haskell

72.7%

C

27.3%