Popularity
3.7
Declining
Activity
0.0
Stable
2
4
0
Monthly Downloads: 10
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Latest version: v0.2.3.0
bit-protocol alternatives and similar packages
Based on the "bits" category.
Alternatively, view bit-protocol alternatives based on common mentions on social networks and blogs.
Clean code begins in your IDE with SonarLint
Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.
Promo
www.sonarlint.org
Do you think we are missing an alternative of bit-protocol or a related project?
Popular Comparisons
README
bit-protocol
A package suitable for binary protocols defined in a manner where you have bit counts not aligned by 8.
For example, if you have a protocol for sending user profiles saying:
The value sent must be a base64url-encoded string consisting of four values:
- 6 bits representing user's age
- 7 bits for their favorite number
- 5 bits for their lucky number
- 6 bits for a random number
you could use the library as follows:
import Data.BitProtocol
import Data.ByteString.Base64.URL (encode)
main :: IO ()
main = do
let age = 29
fav = 12
lucky = 13
rand = 14
-- the number in protocol should be base64url(011101_0001100_01101_001110)
print $ encode $ encodeBS8 $ [BitsVal 6 age, BitsVal 7 fav, BitsVal 5 lucky, BitsVal 6 rand]
-- will output "dGNO"
-- which is the same as `encode (BC8.pack (map chr [0b01110100, 0b01100011, 0b01001110]))`
Parsing can be done like this:
let (Right bs) = decode "dGNO"
let (xs, BitsVal 0 0, "") = parseBS8 [6, 7, 5, 6] bs
print xs
-- Will output:
-- ( [BitsVal 6 29, BitsVal 7 12, BitsVal 5 13, BitsVal 6 14]
-- , BitsVal 0 0
-- , "")
Warning! Does not support negative numbers.
TODO:
- [ ] use shift operations instead of division in more places
- [ ] add a performance test
- [ ] consider adding checks upon arithmetic overflows (if you use
Int
in quickcheck test you'll quickly find some)