
On 09 January 2005 12:43, Dominic Steinitz wrote:
base64 encoding / decoding should probably be included in Codec.Utils (I've seen copies of the same code all over the place) and if anyone has the time, they are very welcome to add it.
I'd also welcome feedback on whether this is the right place in the hierarchy for such a package and modules.
We generally try to avoid names like 'Utils', if at all possible. Sometimes you really do need a bag of miscellaneous bits though (eg. Foreign.Marshal.Utils). For base64, the hierarchy design has this in Codec.Binary.Base64: http://www.haskell.org/~simonmar/lib-hierarchy.html Cheers, Simon

On Monday 10 Jan 2005 10:42 am, Simon Marlow wrote:
On 09 January 2005 12:43, Dominic Steinitz wrote:
base64 encoding / decoding should probably be included in Codec.Utils (I've seen copies of the same code all over the place) and if anyone has the time, they are very welcome to add it.
I'd also welcome feedback on whether this is the right place in the hierarchy for such a package and modules.
We generally try to avoid names like 'Utils', if at all possible. Sometimes you really do need a bag of miscellaneous bits though (eg. Foreign.Marshal.Utils).
For base64, the hierarchy design has this in Codec.Binary.Base64:
http://www.haskell.org/~simonmar/lib-hierarchy.html
Cheers, Simon
Simon, Thanks for this. I'd forgotten about the document describing the hierarchy. The Codec.Utils exports: type Octet = Word8 msb :: Int fromTwosComp :: Integral a => [Octet] -> a toOctets :: Integral a => a -> a -> [Octet] fromOctets :: Num a => a -> [Octet] -> a i2osp :: Integral a => Int -> a -> [Octet] Thinking about it, i2osp should go in Codec.Encryption.RSA as it's specific to RSA. I'm not clear about the rest. How about Codec.Integral for toOctets, fromOctets and fromTwosComp? I could probably live without Octet (although quite a few standards are defined using the term octet) but I find myself needing msb (most significant bit) in quite a few places. Where would that go? Whilst on the subject, why is BER in Network? BER is one of many encodings for ASN.1 and use of BER is not limited to networks; it is used heavily in cryptography, for example, in PKCS#8 and X.509. I'd suggest Codec.ASN1.BER, Codec.ASN1.TLV for the functions that take octets and turn them into Tags, Lengths and Values and Codec.ASN1.ASN1 for real ASN.1 types and functions. Furthermore, if I follow the hierarchy for the existing cryptography library then I would end up with Data.Digest for MD5 and SHA-1. What would the package name for these be? Digest? What should the package name be for DES, AES, Blowfish and RSA be? Still crypto or Encryption? In general is there a relationship between modules and their names and package names? Dominic.
participants (2)
-
Dominic Steinitz
-
Simon Marlow