packman/packman.cabal
2018-08-20 21:10:55 +10:00

183 lines
6.7 KiB
Plaintext

name: packman
version: 0.5.1
synopsis: Serialization library for GHC
description:
This package provides Haskell data serialisation independent of evaluation,
by accessing the Haskell heap using foreign primitive operations.
Any Haskell data structure apart from mutable data structures (@MVar@s
and @TVar@s) can be serialised and later deserialised during the same run,
or loaded into a new run, of the same program (the same executable file).
.
The library provides operations to @serialize@ Haskell heap data,
and to @deserialize@ it:
.
> trySerializeWith :: a -> Int -> IO (Serialized a) -- Int is maximum buffer size to use
> trySerialize :: a -> IO (Serialized a) -- uses default (maximum) buffer size
> deserialize :: Serialized a -> IO a
.
The data type @Serialized a@ is an opaque representation of serialised
Haskell data (it contains a @ByteArray@).
A phantom type @a@ ensures type safety within the same program run.
Type @a@ can be polymorphic (at compile time, that is) when @Serialized a@
is not used apart from being argument to @deserialize@.
When data are externalised (written to disk or communicated over the
network) using the provided instances of @Binary@ or @Read@ and @Show@,
@a@ needs to be monomorphic because they require @Typeable@ context.
The instances for @Show@ and @Read@ satisfy @read . show == id@.
.
Packman serialisation is /orthogonal/ to evaluation, heap data are
serialised /in their current state of evaluation/, they might be entirely
unevaluated (a thunk) or only partially evaluated (containing thunks).
Therefore, there can be cases where a mutable data structure is captured by
a thunk, and lead to serialisation failures (typically related to lazy I/O).
.
The serialisation routine will throw a @PackException@ if an error occurs
inside the C code which accesses the Haskell heap, if a mutable data
structure is serialised, or if the serialised data is too large.
In presence of concurrent threads, another thread might be evaluating
data /referred to/ by the data to be serialised. In this case, the calling
thread will /block/ on the ongoing evaluation and continue when evaluated
data is available.
Internally, there is a @PackException@ @P_BLACKHOLE@ to signal the
condition, but it is hidden inside the core library
category: Serialization, Data, GHC
license: BSD3
license-file: LICENSE
author: Michael Budde, Ásbjørn V. Jøkladal, Jost Berthold
maintainer: jost.berthold@gmail.com
build-type: Simple
cabal-version: >= 1.18
tested-with: GHC==7.8.2, GHC==7.8.3, GHC==7.10.2, GHC==8.0.2, GHC==8.2.1, GHC==8.2.2, GHC==8.4.3
extra-source-files: cbits/Wrapper.cmm
cbits/Pack.c
cbits/Errors.h
cbits/Types.h
cbits/GHCFunctions.h
cbits/GhcHeapAlloc.h
cbits/BeginPrivate.h
cbits/EndPrivate.h
flag debug
manual: True
default: False
description: Enable debug support
-- we abuse flags "prof(p)" and "sparks(r)" and use "sanity(S)"
library
exposed-modules: GHC.Packing
GHC.Packing.PackException
GHC.Packing.Type
GHC.Packing.Core
build-depends: base >= 4.7 && < 5,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5
if flag(debug)
ghc-options: -debug -optc-DDEBUG -optc-g
c-sources: cbits/Wrapper.cmm
cbits/Pack.c
include-dirs: cbits
includes:
default-language: Haskell2010
if flag(debug)
cc-options: -g -DDEBUG -DLIBRARY_CODE
else
cc-options: -DLIBRARY_CODE
test-suite simpletest
type: exitcode-stdio-1.0
main-is: TestSerialisation.hs
hs-source-dirs: Test
build-depends: base >= 4.7,
directory >= 1.2,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5,
packman
default-language: Haskell2010
if flag(debug)
ghc-options: -debug -optc-g -optc-DDEBUG
test-suite testexceptions
type: exitcode-stdio-1.0
main-is: TestExceptions.hs
hs-source-dirs: Test
build-depends: base >= 4.7,
directory >= 1.2,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5,
Cabal >= 1.18,
packman
default-language: Haskell2010
if flag(debug)
ghc-options: -debug -optc-g -optc-DDEBUG
test-suite alltests
type: detailed-0.9
test-module: AllTests
hs-source-dirs: Test
build-depends: base >= 4.7,
directory >= 1.2,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5,
Cabal >= 1.20,
packman
default-language: Haskell2010
if flag(debug)
ghc-options: -debug -optc-g -optc-DDEBUG
test-suite testmthread
type: exitcode-stdio-1.0
main-is: TestMThread.hs
hs-source-dirs: Test
build-depends: base >= 4.7,
directory >= 1.2,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5,
Cabal >= 1.20,
packman
default-language: Haskell2010
if flag(debug)
ghc-options: -with-rtsopts=-N4 -debug -threaded -optc-g -optc-DDEBUG
else
ghc-options: -with-rtsopts=-N4 -threaded
test-suite quickchecktest
type: detailed-0.9
test-module: QCTest
hs-source-dirs: Test
build-depends: base >= 4.7,
directory >= 1.2,
ghc-prim >= 0.3,
array >= 0.5,
binary >= 0.7,
bytestring >= 0.10,
primitive >= 0.5,
Cabal >= 1.20,
QuickCheck >= 2.6,
packman
default-language: Haskell2010
if flag(debug)
ghc-options: -debug -optc-g -optc-DDEBUG
source-repository head
type: git
location: https://github.com/jberthold/packman.git