binrep-0.3.1: Encode precise binary representations directly in types
Safe HaskellSafe-Inferred
LanguageHaskell2010

Binrep.BLen.Internal.AsBLen

Synopsis

Documentation

class AsBLen a where Source #

Helper definitions for using the given type to store byte lengths.

Byte lengths must be non-negative. Thus, the ideal representation is a Natural. However, most underlying types that we use (ByteString, lists) store their length in Ints. By similarly storing an Int ourselves, we could potentially improve performance.

I like both options, and don't want to give up either. So we provide helpers via a typeclass so that the user doesn't ever have to think about the underlying type.

For simplicity, documentation may consider a to be an "unsigned" type. For example, underflow refers to a negative a result.

Methods

safeBLenSub :: a -> a -> Maybe a Source #

Safe blen subtraction, returning Nothing for negative results.

Regular subtraction should only be used when you have a guarantee that it won't underflow.

posIntToBLen :: Int -> a Source #

Convert some Int i where i >= 0 to a blen.

This is intended for wrapping the output of length functions.

wordToBLen# :: Word# -> a Source #

Convert some Word# w where w <= maxBound a@ to a blen.

natToBLen :: Natural -> a Source #

Convert some Natural n where n <= maxBound a@ to a blen.