[Haskell-cafe] ANN: ctemplate, SSL server support in HsOpenSSL, network-minihttp, binary parsing, network-dns

Adam Langley agl at imperialviolet.org
Thu Feb 14 19:44:48 EST 2008

Binary parsing:

binary-strict now has support for combinator parsing[1] with <|> and
friends. This works both for the strict Get and the IncrementalGet.
(The latter was more complex than I expected)

binary-strict also gained a very fast byte set module[2] (used for
scanning ranges of valid bytes) and a surprisingly useful hexDump[3]
function (because I kept having to write it in lots of places)

[1] http://hackage.haskell.org/packages/archive/binary-strict/0.3.0/doc/html/Data-Binary-Strict-Class.html
[2] http://hackage.haskell.org/packages/archive/binary-strict/0.3.0/doc/html/Data-Binary-Strict-ByteSet.html
[3] http://hackage.haskell.org/packages/archive/binary-strict/0.3.0/doc/html/Data-Binary-Strict-Util.html


network-dns contains a DNS client library[4] in pure Haskell. The ADNS
library (for which a wrapper already exists) is GPL, not BSD. This
code is also halfway to being a DNS server should anyone so wish. This
is very similar to the DNS client library in libevent (because I wrote
them both).


ctemplate is a wrapping of the template library which Google uses for
most of their sites. There are several template systems already in
Hackage, but I like ctemplate because escaping is so easy and well
supported. Generally the power of a template system doesn't interest
me (in fact, it can be a bad thing), but stopping XSS attacks is a big

HsOpenSSL now has rudimentary support for writing SSL servers[5]
(clients coming soon). In terms of blocking IO, this /should/ work the
way you would hope (i.e. like a Haskell function w.r.t. forkIO).

network-minihttp is a small HTTP server. Currently it serves files
from the disk (with caching and range support), but it's most of the
way to being a HTTP client also. Don't do anything too serious with it
yet, however. It needs a few limits to stop DoS attackers from, for
example, sending an infinite header and using up all the memory :)

[4] http://hackage.haskell.org/packages/archive/network-dns/0.1.1/doc/html/Network-DNS-Client.html

Adam Langley agl at imperialviolet.org
http://www.imperialviolet.org 650-283-9641

More information about the Haskell-Cafe mailing list