Skip to content

Unisay/purescript-binary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

purescript-binary

Build Status

The idea behind this library is to provide a bit-manipulation primitives together with type classes that capture isomorphism between your custom types and arrays of bits.

Additionally, library provides [Un]signed integer types of a size fixed at the type level:

  • Data.Binary.UnsignedInt
  • Data.Binary.SignedInt

Example usage:

> pulp psci

> import Prelude
> import Data.Binary (toBits)
> import Data.Binary.UnsignedInt
> import Data.Typelevel.Num 
> uint32 = fromInt d32
> bits = uint32 >>> toBits
> uint32 100
UnsignedInt32#1100100

> :t uint32 100
UnsignedInt (NumCons D3 D2)

> bits 100
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0]

> two = uint32 2
> five = uint32 5
> toBits (two * five)
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0]

> import Data.Bounded 
> (top :: UnsignedInt D17)
UnsignedInt17#11111111111111111

> (bottom :: UnsignedInt D17)
UnsignedInt17#0

Data.Binary.SignedInt works in the two's complement for negative values:

> import Data.Binary.SignedInt
> import Data.Typelevel.Num 
> import Data.Bounded 
> (bottom :: SignedInt D5)
SignedInt5#10000

> (top :: SignedInt D5)
SignedInt5#01111