packages feed

pure-borrow-0.0.0.0: pure-borrow.cabal

cabal-version: 3.4
name: pure-borrow
version: 0.0.0.0
synopsis: Rust-style borrowing in Linear Haskell with purity
description:
  This package realizes rust-style borrowing in Linear Haskell with purity and concurrency support.
  See "Control.Monad.Borrow.Pure" for the main API documentation, and see our paper [/Pure Borrowing: Linear Haskell Meets Rust-Style Borrowing/](https://arxiv.org/abs/2604.15290) by Y. Matsushita and H. Ishii for the details.

license: BSD-3-Clause
license-file: LICENSE
author: Yusuke Matsushita and Hiromi Ishii
maintainer:
  ysk.m24t@gmail.com
  konn.jinro@gmail.com

copyright: Copyright (c) 2025-present, Yusuke Matsushita and Hiromi Ishii
category: Linear Haskell
build-type: Simple
homepage: https://github.com/SoftwareFoundationGroupAtKyotoU/pure-borrow
extra-doc-files:
  CHANGELOG.md
  README.md

data-files:
  dockerfiles/artifact/Dockerfile
  scripts/genplot.gnuplot

tested-with: ghc ==9.10.2 || ==9.12.4 || ==9.14.1

source-repository head
  type: git
  location: https://github.com/SoftwareFoundationGroupAtKyotoU/pure-borrow

flag artifact
  description: Build the artifact runner executable, which runs all the benchmarks and produces CSV files.
  default: False
  manual: True

common defaults
  default-language: GHC2021
  default-extensions: LinearTypes
  autogen-modules: Paths_pure_borrow
  other-modules: Paths_pure_borrow
  ghc-options:
    -Wall
    -Wcompat
    -Widentities
    -Wincomplete-record-updates
    -Wincomplete-uni-patterns
    -Wmissing-export-lists
    -Wmissing-home-modules
    -Wpartial-fields
    -Wredundant-constraints
    -Wunused-packages

  build-depends:
    base >=4.17 && <5,
    linear-base >=0.7,

library
  import: defaults
  build-depends:
    array,
    containers,
    deepseq,
    hybrid-vectors,
    linear-generics,
    stm,
    vector,
    vector-algorithms,

  hs-source-dirs: src
  -- cabal-gild: discover src --exclude src/**/Utils.hs --exclude src/**/Utils/**/*.hs
  exposed-modules:
    Control.Concurrent.DivideConquer.Linear
    Control.Concurrent.STM.TMDeque
    Control.Concurrent.STM.TMDequeRingBuffer
    Control.Monad.Borrow.Pure
    Control.Monad.Borrow.Pure.Affine
    Control.Monad.Borrow.Pure.Affine.Internal
    Control.Monad.Borrow.Pure.Affine.Unsafe
    Control.Monad.Borrow.Pure.BO
    Control.Monad.Borrow.Pure.BO.Internal
    Control.Monad.Borrow.Pure.BO.Unsafe
    Control.Monad.Borrow.Pure.Clone
    Control.Monad.Borrow.Pure.Copyable
    Control.Monad.Borrow.Pure.Experimental.Borrows
    Control.Monad.Borrow.Pure.Experimental.Loop
    Control.Monad.Borrow.Pure.Experimental.Reborrowable
    Control.Monad.Borrow.Pure.Lifetime
    Control.Monad.Borrow.Pure.Lifetime.Internal
    Control.Monad.Borrow.Pure.Lifetime.Token
    Control.Monad.Borrow.Pure.Lifetime.Token.Internal
    Control.Monad.Borrow.Pure.Lifetime.Token.Unsafe
    Control.Syntax.DataFlow
    Data.Coerce.Directed
    Data.Coerce.Directed.Internal
    Data.Coerce.Directed.Unsafe
    Data.Comonad.Linear
    Data.Record.Linear.Borrow.Experimental.PatternMatch
    Data.Record.Linear.Borrow.Experimental.Split
    Data.Ref.Linear
    Data.Ref.Linear.Borrow
    Data.Ref.Linear.Unlifted
    Data.Unique.Linear
    Data.Vector.Mutable.Linear.Borrow

  -- cabal-gild: discover src --include src/**/Utils.hs --include src/**/Utils/**/*.hs
  other-modules:
    Control.Concurrent.DivideConquer.Utils.OnceChan.Linear
    Control.Concurrent.DivideConquer.Utils.OnceChan.Linear.Unlifted
    Control.Concurrent.DivideConquer.Utils.QueuePool
    Control.Monad.Borrow.Pure.Utils

  build-tool-depends: cabal-gild:cabal-gild >=1.6.0.0
  build-depends:

test-suite pure-borrow-test
  import: defaults
  default-language: GHC2021
  type: exitcode-stdio-1.0
  hs-source-dirs: test
  main-is: Main.hs
  -- cabal-gild: discover test --exclude=test/Main.hs
  other-modules:
    Control.Concurrent.DivideConquer.LinearSpec
    Control.Monad.Borrow.Pure.Lifetime.TypingCases
    Control.Monad.Borrow.Pure.LifetimeSpec
    Data.Vector.Mutable.Linear.BorrowSpec

  ghc-options:
    -O2
    -threaded
    -with-rtsopts=-N

  build-tool-depends:
    tasty-discover:tasty-discover >=5.0.1

  build-depends:
    deepseq,
    falsify,
    pure-borrow,
    tasty,
    tasty-expected-failure,
    tasty-hunit,
    vector,

test-suite pure-borrow-doctests
  import: defaults

  -- NOTE: the older GHC has a bug where REPL segfaults with LinearTypes.
  -- See: https://gitlab.haskell.org/ghc/ghc/-/issues/26565#note_645783
  if impl(ghc <9.12.3)
    buildable: False
  default-language: GHC2021
  type: exitcode-stdio-1.0
  hs-source-dirs: doctests
  main-is: doctests.hs
  -- cabal-gild: discover doctests --exclude=test/doctests.hs
  other-modules:
  ghc-options:
    -O2
    -threaded
    -with-rtsopts=-N

  build-depends:
    doctest-parallel >=0.4.1,
    pure-borrow,

library qsort-bench-suites
  import: defaults
  hs-source-dirs: internal-src/qsort-bench-suites
  -- cabal-gild: discover internal-src/qsort-bench-suites
  exposed-modules: PureBorrow.Internal.Bench.QSort
  build-depends:
    base >=4.7 && <5,
    deepseq,
    optparse-applicative,
    pure-borrow,
    random,
    tasty,
    tasty-bench,
    vector,
    vector-algorithms,

  default-language: GHC2021

benchmark qsort-bench
  import: defaults
  type: exitcode-stdio-1.0
  main-is: qsort.hs
  hs-source-dirs: bench
  ghc-options:
    -threaded
    -rtsopts
    -O2
    "-with-rtsopts=-N -s"

  build-depends:
    base >=4.7 && <5,
    pure-borrow:qsort-bench-suites,

  default-language: GHC2021

library qsort-demo-impl
  import: defaults
  hs-source-dirs: internal-src/qsort-demo-impl
  -- cabal-gild: discover internal-src/qsort-demo-impl
  exposed-modules: PureBorrow.Demo.QSort
  build-depends:
    base >=4.7 && <5,
    deepseq,
    optparse-applicative,
    pure-borrow,
    random,
    vector,
    vector-algorithms,

  default-language: GHC2021

executable qsort
  import: defaults
  main-is: qsort.hs
  hs-source-dirs: app
  ghc-options:
    -threaded
    -rtsopts
    -with-rtsopts=-N

  build-depends:
    base >=4.7 && <5,
    pure-borrow:qsort-demo-impl,

  default-language: GHC2021

executable convert-qsort-bench-csv
  import: defaults
  main-is: convert-qsort-bench-csv.hs
  hs-source-dirs: app
  ghc-options:
    -threaded
    -rtsopts
    -with-rtsopts=-N

  build-depends:
    base >=4.7 && <5,
    bytestring,
    cassava,
    deepseq,
    monoidal-containers,
    optparse-applicative,
    pure-borrow,
    text,
    unordered-containers,
    vector,
    vector-algorithms,

  default-language: GHC2021

executable artifact-runner
  import: defaults

  if flag(artifact)
    buildable: True
  else
    buildable: False

  main-is: artifact-runner.hs
  hs-source-dirs: app
  ghc-options:
    -O2
    -threaded
    -rtsopts
    "-with-rtsopts=-N -s"

  build-depends:
    base >=4.7 && <5,
    bytestring,
    cassava,
    containers,
    deepseq,
    directory,
    file-embed,
    monoidal-containers,
    optparse-applicative,
    process,
    pure-borrow,
    pure-borrow:qsort-bench-suites,
    pure-borrow:qsort-demo-impl,
    tasty,
    template-haskell,
    temporary,
    text,
    transformers,
    vector,
    vector-algorithms,

  default-language: GHC2021