Hi

Don Stewart wrote:
> gue.schmidt:
> > Hi all,
> >
> > I've never found an easy way to deal with ByteStrings.
> >
> > I'm using the RSA library and it en- and decodes  
> > Data.ByteString.Lazy.ByteString.
> >
> > I initially start with Strings, ie. [Char], but there is no function to  
> > convert the 2 back and forth. There is however a function which takes  
> > [Word8] to BytesString and back.
> >
> > It all wouldn't be so confusing if there weren't several versions of  
> > ByteString in several modules to choose from. And a number of libraries  
> > requiring different types of ByteString.
> >
> > I am sure the designers of the bytestring package had good reason for  
> > this design, is there also a webpage which explains which one to use and  
> > under what circumstances?

I really would like such a webpage, because I am also confused about
when to use what type of strings.

> 
> As a general rule you should never convert between String and
> bytestring. You can read bytestrings from files, or write literals using
> "pack" or the -XOverloadedStrings extension

Except that different libraries require different kind of strings. Some
use strict bytestring, some use lazy bytestring, some use [Char], some
use lazy Data.Text, ... So you really need to convert between different
representations. It may seem unfair that I put byte-strings and
char-strings in the same bucket, but libraries do use byte-strings to
contain characters. For example, Parsec has a [Char] and a bytestring
interface.

Strings are the glue that binds many libraries together, and the many
different types of strings complicate this glue. It is therefore much
more complicated to compose different libraries than it was when most
libraries used [Char]. It really would make Haskell programming easier
if we could settle on one char-string type (and one type for
byte-strings).

> 
> Converting between lazy and strict bytestrings is a representation
> change, and changes complexity - so be aware of what you're doing. You
> can do this via fromChunks or concat . toChunks.

Reading the introduction to lazy bytestring here
http://hackage.haskell.org/packages/archive/bytestring/0.9.1.5/doc/html/Data-ByteString-Lazy.html
 it seems that lazy bytestring always has at least as good complexity as strict 
bytestrings. Lazy Data.Text strings also has at least as good complexity as 
strict Data.Text strings. So, for public library interfaces it would be great 
if could settle for some lazy string type like Data.Text. Preferably a string 
type that could be efficiently converted to lazy bytestrings for libraries that 
deal with bytes and not characters. This however, requires that the community 
can settle for one char-string type and a good beginning could be a description 
of how string handling is supposed to happen in Haskell (I am thinking about a 
webpage like Günther writes about).


/Mads

> 
> -- Don
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to