Potential Network SIG

taruti taruti at taruti.net
Sat Aug 22 14:26:02 EDT 2009


Excerpts from Thomas DuBuisson's message of Sat Aug 22 07:49:58 +0300 2009:
> Johan suggested starting a SIG to hammer out a design for a new
> Network API seeing as the current API, a straight-forward Berkeley
> binding, doesn't seem to please anyone in a Haskell context.  If you
> want to partake then this e-mail if your heads up.  If there is some
> formal method of setting up a Haskell SIG then please let me know.

Sounds good, some notes below.

> 1) Separate low level functions / bindings from high level /
> productive code by placing each in different modules.

Good.

> 2) Maintain type safety by using type classes for most things.
> 
> Unlike Network.Fancy and Network.Socket (which have IPv4 and IPv6 as
> constructors of the same data type), I think we should allow for the
> possibility that some users of the library will be limited to just one
> IP version without resorting to partial functions.  I suggest type
> classes to cover this aspect (class Address, class Port, etc).

The limitation to one IP-version is a runtime issue not a compile time
one. All the platforms may support either IPv4 or IPv6, both or none
depending on the machine the binary is run on.

I think it should be possible to say "use v4", "use v6" and "use
something" on all target platforms. A typeclass might work fine
if designed correctly.

Also a typeclass makes extensions easier if designed carefully.

> 3) Use Bytestrings (and have corrosponding .Lazy modules) for efficiency.
> As in network-bytestring, any new API should be performance concious
> enough to avoid String.

Ambivalent here. Does it make more sense to have a
send :: StringLike s => ...
or 
sendS :: String -> ...
sendBS :: ByteString -> ...
sendLBS :: L.ByteString -> ...

Also if we have separate functions we need yet another set
of functions when Text is ready.

> 4) Support more features
> Features such as Multicast, Header inclusion (IP_HDRINCL), address
> binding, etc.  IOW, most the IP_ and SO_ options of socket (7) and ip
> (7) man pages.  It would be rather nice if we were able to expose
> these in a friendly way - but with our cross platform concerns that
> might not be a good idea (e.g. I'm not familiar with windows).

Most of these seem to be for the low level binding?

> 5) Separate IO-less data declarations from IO and any platform
> dependent code in different packages.

Would create lots of nearly identical implementation packages.
Most of the implementation differences across platforms are quite
small. 

> 6) Integrate with the rest of hackage.
> This means instance of PrettyClass, Parsec, and Binary.  I noticed a
> number of parsing utilities for IP addresses - lots of duplicated
> effort here.

Sounds good.

- Taru Karttunen


More information about the Libraries mailing list