3 ms·
This is so typical in the Haskell world, comment with a short snippet of code that does not produce the intended result, and when this is pointed out dismiss it
by poikniok 12y ago
This is so typical in the Haskell world, comment with a short snippet of code that does not produce the intended result, and when this is pointed out dismiss it as a trivial implementation problem.
- bkirwi 12y agoHere you go, then: -- little-endian sequence of bytes to arbitrary integral type integerWithBytes :: (Bits a, Integral a) => [Word8] -> a integerWithBytes = foldr (\byte acc -> (acc `shiftL` 8) + fromIntegral byte) 0 At least, I'm pretty sure that's what the article was trying to do... I don't think this is some amazing showcase of Haskell; after all, the article includes a (working?) implementation in C++. But it does serve as a nice counterexample to the idea -- expressed elsewhere in the thread -- that being generic is necessarily a hugely painful or complicated thing.
- codygman 12y agoYep this works: λ> import Data.Bits λ> let integerWithBytes = foldr (\byte acc -> (acc `shiftL` 8) + fromIntegral byte) 0 λ> integerWithBytes [0xFF, 0xFF, 0xFF, 0xFF] 4294967295
- codygman 12y agoI feel like you are overstating both how much this happens in Haskell and how exclusive it is to the Haskell community. Also see bkirwi's response for the working version, then my reply to him for a sample run.