packages feed

packman-0.5.0: packman.cabal

name:                packman
version:             0.5.0
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
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