repa-convert-4.2.1.1: Data/Repa/Convert/Internal/Format.hs
module Data.Repa.Convert.Internal.Format
(Format (..))
where
-- | Relates a storage format to the Haskell type of the value
-- that is stored in that format.
class Format f where
-- | Get the type of a value with this format.
type Value f
-- | Yield the number of separate fields in this format.
fieldCount :: f -> Int
-- | Yield the minumum number of bytes that a value of this
-- format will take up.
--
-- Packing a value into this format
-- is guaranteed to use at least this many bytes.
-- This is exact for fixed-size formats.
minSize :: f -> Int
-- | For fixed size formats, yield their size (length) in bytes.
--
-- Yields `Nothing` if this is not a fixed size format.
--
fixedSize :: f -> Maybe Int
-- | Yield the maximum packed size of the value in this format.
--
-- If `fixedSize` returns a size then `packedSize` returns the same size.
--
-- For variable length formats, `packedSize` is an over-approximation.
-- We allow the actual packed value to use less space, as it may not be
-- possible to determine how much space it needs without actually packing it.
--
-- Yields `Nothing` when a collection of values is to be packed into a
-- fixed length format, but the size of the collection does not match
-- the format.
--
packedSize :: f -> Value f -> Maybe Int