proposal/RFC: add bSwap to base in Data.Bits

Ian Lynagh ian at well-typed.com
Fri May 17 20:37:12 CEST 2013


On Thu, May 16, 2013 at 11:36:46AM +0200, Vincent Hanquez wrote:
> On Thu, May 16, 2013 at 05:07:51AM -0400, Edward Kmett wrote:
> > Henning has a point.
> > 
> > EndianSensitive is arguably the more appropriate notion.
> 
> Yes, Bits is not necessarily the best fit in term of naming or feature, but
> nothing close to EndianSensitive is in base.

There's no reason that the recommended interface to the primitives needs
to be in base. It would be a little unfriendly to only export the
primitives, but we could just export
    byteSwap16 :: Word16 -> Word16
    byteSwap32 :: Word32 -> Word32
    byteSwap64 :: Word64 -> Word64
and leave it up to packages like data-endian to provide a more
user-friendly interface.

The problem with adding a Bytes class is there are various questions,
like "should there be an instance Bytes a => Bytes [a]?", "should there
be a toWord8s :: a -> [Word8]" method?", and "would Word8s be a better
name for the class?". If the class goes into base, then it's a lot
harder to change the answers to these questions (and, indeed, to the
questions that we don't think to ask before the class is in a released
GHC).

I think that adding the functions above, probably to Data.Word, would be
my preference.


Oh, and for the record, I also prefer "byteSwap" to "bswap", and dislike
using (Finite)Bits for this.


Thanks
Ian




More information about the Libraries mailing list