BERT[-RPC] for Haskell
Originally written by marius a. eriksen (firstname.lastname@example.org)
The primitives provided are fairly elementary: for the client,
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
showBERT $ ("hello", 123)
BERT class can also read terms back.
Right ("hello", 123) = readBERT . showBERT $ ("hello", 123)
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"
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.
- Fix a list deserialization bug
- Serialize small ints compactly
Fix compatibility with GHC 7.10
Fix compatibility with recent conduit.
Migrate from network-conduit (which is deprecated) to conduit-extra
Fix build on GHC 7.4
Termnow use Haskell, not Erlang syntax. To get the Erlang-syntax-formatted terms,
parseTermare now exposed.
Fix Windows compatibility
Fix integer (de)serialization on 64-bit platforms
- Fix the docs
- Export the
- Drop the
- Remove support for the (non-standard) bert:// URI
- Change the way transports are represented
- Instead of
fromHostPort, you should now use
- Both the client and the server now support persistent connections
- The default TCP backlog is increased for the server