packages feed

wireform-arrow-0.1.0.0: wireform-arrow.cabal

cabal-version: 3.0
name: wireform-arrow
version: 0.1.0.0
synopsis: Apache Arrow IPC schema framing and record batch materialization
description:
  Arrow column arrays and IPC file/stream codecs, with schema and record
  derivation and optional LZ4 and Zstandard buffer compression.
category: Data, Codec
license: BSD-3-Clause
license-file: LICENSE
author: Ian Duncan
maintainer: ian@iankduncan.com
copyright: 2026 Ian Duncan
build-type: Simple
extra-source-files:
  test-interop/pyarrow_interop.py
  test/golden/*.arrow
  test/golden/*.arrows

flag zstd
  description: Enable Zstandard body-buffer compression for Arrow IPC.
  default: False
  manual: True

flag lz4
  description: Enable LZ4 frame-format body-buffer compression for Arrow IPC.
  default: False
  manual: True

common defaults
  ghc-options:
    -Wall
    -Wcompat
    -Widentities
    -Wincomplete-record-updates
    -Wincomplete-uni-patterns
    -Wpartial-fields
    -Wredundant-constraints
    -O2
  default-language: GHC2021
  default-extensions:
    StrictData
    DerivingStrategies
    DeriveGeneric
    DeriveAnyClass
    OverloadedStrings
    LambdaCase

library
  import: defaults
  hs-source-dirs: src
  exposed-modules:
    Arrow.Column
    Arrow.Column.Buffer
    Arrow.Column.Builder
    Arrow.Column.Internal
    Arrow.Derive
    Arrow.File
    Arrow.FlatBufferIPC
    Arrow.FlatBufferIPC.Common
    Arrow.FlatBufferIPC.Read
    Arrow.FlatBufferIPC.Write
    Arrow.IPC
    Arrow.Read.Columns
    Arrow.Record
    Arrow.Record.Generic
    Arrow.Record.TH
    Arrow.Stream
    Arrow.Types
    Arrow.Vector
    Arrow.Vector.Internal
    Arrow.Write
    Arrow.Write.Columns
  build-depends:
    base >= 4.20 && < 5,
    wireform-core >= 0.3 && < 0.4,
    wireform-columnar-core == 0.1.*,
    wireform-derive == 0.2.*,
    wireform-flatbuffers == 0.1.*,
    bytestring >= 0.11 && < 0.13,
    text >= 2.0 && < 2.2,
    vector >= 0.13 && < 0.14,
    primitive >= 0.7 && < 0.10,
    containers >= 0.6 && < 0.9,
    crypton >= 2.2.6 && < 2.3,
    deepseq >= 1.4 && < 1.6,
    ram >= 0.20.1 && < 0.23,
    template-haskell >= 2.18 && < 2.25
  if flag(zstd)
    cpp-options: -DHAVE_ZSTD
    build-depends: zstd >= 0.1 && < 0.2
  if flag(lz4)
    cpp-options: -DHAVE_LZ4
    -- lz4-hs bundles LZ4 1.9.3 and exposes Codec.Lz4's frame-format
    -- compress / decompress functions. Older Hackage "lz4" only
    -- implements the block format (incompatible with arrow-cpp).
    build-depends: lz4-hs >= 0.1 && < 0.2

test-suite wireform-arrow-test
  import: defaults
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs: test
  other-modules:
    Test.Arrow.Core
    Test.Arrow.Decimal
    Test.Arrow.Features
    Test.Arrow.Gen
    Test.Arrow.Malformed
    Test.Arrow.Props
    Test.Arrow.Sections
    Test.Arrow.Vector
  build-depends:
    base >= 4.20 && < 5,
    wireform-arrow,
    wireform-columnar-core,
    wireform-flatbuffers,
    bytestring >= 0.11 && < 0.13,
    containers >= 0.6 && < 0.9,
    deepseq >= 1.4 && < 1.6,
    directory,
    hedgehog >= 1.2 && < 1.8,
    text >= 2.0 && < 2.2,
    vector >= 0.13 && < 0.14,
    primitive >= 0.7 && < 0.10

test-suite wireform-arrow-derive-test
  import: defaults
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs: test-derive
  other-modules:
    Test.Arrow.Derive
    Test.Arrow.Derive.Types
    Test.Arrow.Derive.Instances
  default-extensions:
    ScopedTypeVariables
    TemplateHaskell
  build-depends:
    base,
    wireform-arrow,
    wireform-derive,
    template-haskell,
    text,
    vector,
    sydtest

benchmark wireform-arrow-bench
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: bench
  main-is: Bench.hs
  -- A 64 MB nursery: the materializing and typed rows are otherwise
  -- dominated by minor GCs (see README, Performance).
  ghc-options: -O2 -rtsopts "-with-rtsopts=-A64m"
  build-depends:
    base,
    wireform-arrow,
    bytestring,
    deepseq,
    text,
    vector,
    criterion >= 1.5 && < 1.7

-- Bidirectional pyarrow interop (wireform-arrow writes / pyarrow reads,
-- pyarrow writes / wireform-arrow reads). Needs a Python with pyarrow:
-- WIREFORM_ARROW_PYTHON (default python3). Prints SKIP and passes when
-- pyarrow is missing unless WIREFORM_ARROW_REQUIRE_PYARROW=1.
test-suite wireform-arrow-pyarrow-interop
  import: defaults
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs: test-interop
  build-depends:
    base >= 4.20 && < 5,
    wireform-arrow,
    bytestring >= 0.11 && < 0.13,
    containers >= 0.6 && < 0.9,
    deepseq >= 1.4 && < 1.6,
    directory >= 1.3 && < 1.4,
    filepath >= 1.4 && < 1.6,
    primitive >= 0.7 && < 0.10,
    process >= 1.6 && < 1.8,
    temporary >= 1.3 && < 1.4,
    text >= 2.0 && < 2.2,
    vector >= 0.13 && < 0.14
  if flag(zstd)
    cpp-options: -DHAVE_ZSTD
  if flag(lz4)
    cpp-options: -DHAVE_LZ4