packages feed

ptr-peeker-0.1: ptr-peeker.cabal

cabal-version: 3.0
name: ptr-peeker
version: 0.1
synopsis: High-performance composable binary data deserializers
description:
  A high-performance binary data deserialization library providing a type-safe, flexible and composable abstraction over manipulations on pointers.

  The API consists of two complementary abstractions:

  * 'Fixed' decoders for compile-time known, fixed-size data structures

  * 'Variable' decoders for runtime-dependent, variable-size data structures

  In combination they allow to build decoders of any complexity.

  The library delivers superior performance compared to alternatives like "cereal" and "store", making it ideal for high-throughput applications, networking, and systems programming.

copyright: (c) 2021, Nikita Volkov
license: MIT
license-file: LICENSE

source-repository head
  type: git
  location: https://github.com/nikita-volkov/ptr-peeker

common base
  default-language: Haskell2010
  default-extensions:
    ApplicativeDo
    Arrows
    BangPatterns
    BlockArguments
    ConstraintKinds
    DataKinds
    DefaultSignatures
    DeriveDataTypeable
    DeriveFoldable
    DeriveFunctor
    DeriveGeneric
    DeriveTraversable
    DerivingVia
    EmptyDataDecls
    FlexibleContexts
    FlexibleInstances
    FunctionalDependencies
    GADTs
    GeneralizedNewtypeDeriving
    ImportQualifiedPost
    LambdaCase
    LiberalTypeSynonyms
    MagicHash
    MultiParamTypeClasses
    MultiWayIf
    NoImplicitPrelude
    NoMonomorphismRestriction
    OverloadedStrings
    ParallelListComp
    PatternGuards
    QuasiQuotes
    RankNTypes
    RecordWildCards
    RoleAnnotations
    ScopedTypeVariables
    StandaloneDeriving
    StrictData
    TemplateHaskell
    TupleSections
    TypeApplications
    TypeFamilies
    TypeOperators
    UnboxedTuples

common executable
  import: base
  ghc-options:
    -O2
    -threaded
    -with-rtsopts=-N
    -rtsopts
    -funbox-strict-fields

common test
  import: base
  ghc-options:
    -threaded
    -with-rtsopts=-N

library
  import: base
  hs-source-dirs: src/library
  exposed-modules: PtrPeeker
  other-modules:
    PtrPeeker.Fixed
    PtrPeeker.Prelude
    PtrPeeker.Variable

  build-depends:
    base >=4.14 && <5,
    bytestring >=0.11 && <0.14,
    ptr >=0.16.8.6 && <0.17,
    text >=2 && <3,
    vector >=0.13 && <0.14,

test-suite test
  import: test
  type: exitcode-stdio-1.0
  hs-source-dirs: src/test
  main-is: Main.hs
  build-depends:
    QuickCheck >=2.8.1 && <3,
    cereal >=0.5.8 && <0.6,
    ptr-peeker,
    quickcheck-instances >=0.3.11 && <0.4,
    rerebase <2,
    tasty >=1.4.1 && <2,
    tasty-hunit >=0.10.0.3 && <0.11,
    tasty-quickcheck >=0.10.1.2 && <0.11,

benchmark bench
  import: executable
  type: exitcode-stdio-1.0
  hs-source-dirs: src/bench
  main-is: Main.hs
  build-depends:
    cereal >=0.5.8.3 && <0.6,
    criterion >=1.6 && <1.7,
    ptr-peeker,
    rerebase >=1.16.1 && <2,
    store >=0.7.18 && <0.8,
    tasty-hunit >=0.10.0.3 && <0.11,