The bert package

[Tags: bsd3, library]

Implements the BERT serialization and RPC protocols described at

[Skip to ReadMe]


Versions1.0, 1.1, 1.1.1, 1.1.2,, 1.2, 1.2.1,,, 1.2.2,,,,
Dependenciesbase (==4.*), binary (>=0.5), binary-conduit (>=1.2), bytestring (>=0.9), conduit (>=1.0), containers (>=0.2), mtl (>=1.1), network (>=2.3), network-conduit (>=1.0), parsec (>=2.0), time (>=1.1), unix (>=2.0), void [details]
Copyright(c) 2009-2011 marius a. eriksen; (c) 2013 Roman Cheplyaka
Authormarius a. eriksen, Roman Cheplyaka
MaintainerRoman Cheplyaka <>
Home page
Bug tracker
Source repositoryhead: git clone
UploadedTue Feb 18 13:42:35 UTC 2014 by RomanCheplyaka
Downloads2380 total (99 in last 30 days)
0 []
StatusDocs available [build log]
Successful builds reported [all 1 reports]




Maintainers' corner

For package maintainers and hackage trustees

Readme for bert-

BERT[-RPC] for Haskell

Originally written by marius a. eriksen (

This is a BERT serializer/deserializer and BERT-RPC client and server for Haskell. BERT-RPC currently supports synchronous (call) requests.

The primitives provided are fairly elementary: for the client, call provides the capability to perform the RPC call, while the server's serve is provided with a dispatch function providing the dispatching logic for the server. Thus, one can imagine building higher level abstractions on top of these primitives.


It's a cabal package, so

$ cabal install bert

should do the trick.


import qualified Data.ByteString.Lazy.Char8 as C
import Data.BERT

Creating BERT terms is simple.

TupleTerm [BytelistTerm (C.pack "hello"), IntTerm 123]

Or by using the BERT typeclass.

showBERT $ ("hello", 123)

The BERT class can also read terms back.

Right ("hello", 123) = readBERT . showBERT $ ("hello", 123)

BERT-RPC client

import Data.BERT
import Network.BERT.Client

Create a transport to the server endpoint, and issue a (synchronous) call with it.

t <- tcpClient "localhost" 8080
r <- call t "calc" "add" ([123, 3000]::[Int])
case r of
  Right res -> print (res :: Int)
  Left _    -> putStrLn "error"

BERT-RPC server

import Data.BERT
import Network.BERT.Server

Create a transport from which to accept connections, and provide a dispatch function for incoming RPCs. The dispatch function is issued in a new thread for each incoming request.

main = do
  s <- tcpServer 8080
  serve s dispatch

dispatch "calc" "add" [IntTerm a, IntTerm b] = 
  return $ Success $ IntTerm (a + b)
dispatch "calc" _ _ =
  return NoSuchFunction
dispatch _ _ _ = 
  return NoSuchModule


Roman Cheplyaka is the primary maintainer.

Oleksandr Manzyuk is the backup maintainer. Please get in touch with him if the primary maintainer cannot be reached.