[Haskell-cafe] How to use Data.ByteString ?

Jason Dagit dagit at codersbase.com
Tue May 19 01:42:40 EDT 2009


On Mon, May 18, 2009 at 10:13 PM, Brandon S. Allbery KF8NH
<allbery at ece.cmu.edu> wrote:
> On May 19, 2009, at 01:07 , z_axis wrote:
>
> rollDice_t n = do
>     hd <- openFile "/dev/random" ReadMode
>     v <-  B.hGet hd 1
>     return (v `mod` n) + 1
>
>  No instance for (Integral B.ByteString)
>
> You can't just read a binary string and have it interpreted as a number; you
> want to use Data.Binary to extract an Int (or whatever) from the ByteString.
>  The same would apply with legacy Strings; in Haskell, String, ByteString,
> and Int are distinct types and there is no automatic casting.  In fact I'm
> not quite sure why you thought that should work; even Perl would make you
> unpack(), and C would require you to use an appropriately-aligned buffer and
> unsafely cast the (char *) to an (int *).

I just want to add that, this wouldn't stop Visual Basic!

I've often seen this bit of scary code in VB:
Dim i as Integer = 5
If i = "5" Then
   ' Do something, because 5 = "5"
End If

The designers of VB were quite odd though.  I frequently find that VB
violates the assumptions I make about programming languages (the
logical "And" operation isn't short-circuit logic!).

Jason


More information about the Haskell-Cafe mailing list