On Jan 16, 2008 2:41 PM, Dominic Steinitz
<[EMAIL PROTECTED]> wrote:
> tlv_ bin =
>    do tagValueVal <- getBits bin 5
>       tagConstructionVal <- getBits bin 1
>       tagTypeVal <- getBits bin 2
>
> I'm sure I'm wrong but putting bits into [Bool] doesn't look very efficient. 
> Of
> course, NewBinary didn't address what happened for n >= 8. Some possibilities
> are a) not allowing more than 8 b) returning [Word8] or c) (which I thought 
> was
> where we'd go) a ByteString with some sort of padding.

BitGet is just an API RFC at the moment, so I'm just describing it
here - not trying to justify it.

In BitGet there's getAsWord[8|16|32|64] which take a number of bits ($n$) and
returns the next $n$ bits in the bottom of a Word$x$. Thus, getAsWord8 is what
you call getBits and, if you had a 48 bit number, you could use getAsWord64 and
the bottom 48-bits of the resulting Word64 would be what you want.

Equally, asking for more than $x$ bits when calling getAsWord$x$ is a mistake,
however I don't check for it in the interest of speed.

There are also get[Left|Right]ByteString which return the next $n$ bits in a
ByteString of Word8's. The padding is either at the end of the last byte (left
aligned) or at the beginning of the first byte (right aligned).

If you did want a [Bool], you could use:
  bits <- sequence $ take n $ repeat getBit


AGL

--
Adam Langley                                      [EMAIL PROTECTED]
http://www.imperialviolet.org                       650-283-9641
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to