streamly-core-0.3.1: streamly-core.cabal
cabal-version: 2.4
name: streamly-core
version: 0.3.1
synopsis: Streaming, parsers, arrays, serialization and more
description:
For upgrading to streamly-0.9.0+ please read the
<https://github.com/composewell/streamly/blob/streamly-0.10.0/docs/User/Project/Upgrading-0.8-to-0.9.md Streamly-0.9.0 upgrade guide>.
.
Streamly is a high-performance, beginner-friendly standard library
for Haskell. It unifies streaming with list transformers and logic
programming; unifies streaming with concurrency and reactive
programming; unifies arrays with ring arrays, text, bytestring
and vector use cases; unifies arrays with builders and binary
serialization; generalizes parsers to any input type and unifies
attoparsec, parsec use cases with better performance; provides
streaming fileIO — all with a clean, consistent, well-integrated and
streaming enabled API.
.
Streams are designed to have a list like interface — no steep
learning curve, no complex types. Streamly is designed to build
general purpose applications in a truly functional manner, from
simple hello-world to advanced high-performance systems. The design
emphasizes simplicity, modularity, and code reuse with minimal
building blocks. Performance is on par with C, tuning is easy, and
it’s hard to get it wrong.
.
Streamly is serial by default, with seamless declarative concurrency
that scales automatically when needed. It provides prompt and safe
resource management, works well with other streaming libraries as well
as core libraries like bytestring and text, and is backed by solid
documentation.
.
@streamly-core@ is a Haskell standard library built on top of @base@
and GHC boot libraries only. Stream processing abstractions include
streams, scans, folds, parsers; and console I/O, file I/O; text
processing. Array abstractions include pinned, unpinned, mutable,
immutable, boxed and unboxed arrays, and ring arrays. Builders,
binary serialization, and deserialization are built-in features of
arrays.
.
This package provides a high-performance, unified and ergonomic
alternative to many disparate packages, such as @streaming, pipes,
conduit, list-t, logict, foldl, attoparsec, array, primitive,
vector, vector-algorithms, binary, cereal, store, bytestring, text,
stringsearch, interpolate, filepath, and path@.
.
Performant. Unified. Modular. Powerful. Simple.
.
Learn more at <https://streamly.composewell.com the streamly website>.
homepage: https://streamly.composewell.com
bug-reports: https://github.com/composewell/streamly/issues
license: BSD-3-Clause
license-file: LICENSE
tested-with: GHC==8.6.5
, GHC==8.8.4
, GHC==8.10.7
, GHC==9.0.2
, GHC==9.2.8
, GHC==9.4.7
, GHC==9.6.3
, GHC==9.8.1
, GHC==9.10.1
, GHC==9.12.1
author: Composewell Technologies
maintainer: streamly@composewell.com
copyright: 2017 Composewell Technologies
category:
Streamly, Streaming, Dataflow, Pipes, List,
Logic, Non-determinism, Parsing, Array, Time
stability: Stable
build-type: Configure
extra-source-files:
configure
configure.ac
-- doctest include files
src/doctest/*.hs
-- This is duplicated
src/Streamly/Internal/Data/Array/ArrayMacros.h
src/Streamly/Internal/Data/ParserDrivers.h
src/assert.hs
src/inline.hs
src/deprecation.h
src/Streamly/Internal/Data/Time/Clock/config-clock.h
src/config.h.in
extra-tmp-files:
config.log
config.status
autom4te.cache
src/config.h
extra-doc-files:
Changelog.md
docs/*.md
docs/ApiChangelogs/*.txt
source-repository head
type: git
location: https://github.com/composewell/streamly
flag debug
description: Debug build with asserts enabled
manual: True
default: False
flag internal-dev
description: DO NOT USE, ONLY FOR INTERNAL USE.
manual: True
default: False
flag has-llvm
description: Use llvm backend for code generation
manual: True
default: False
flag opt
description: off=GHC default, on=-O2
manual: True
default: True
flag limit-build-mem
description: Limits memory when building
manual: True
default: False
flag internal-use-unliftio
description: DO NOT USE, ONLY FOR INTERNAL USE.
manual: True
default: False
flag use-unfolds
description: Use unfolds for generation everywhere
manual: True
default: False
flag use-folds
description: Use folds for elimination everywhere
manual: True
default: False
flag force-lstat-readdir
description: Use lstat instead of checking for dtype in ReadDir
manual: True
default: False
-------------------------------------------------------------------------------
-- Common stanzas
-------------------------------------------------------------------------------
common compile-options
if flag(force-lstat-readdir)
cpp-options: -DFORCE_LSTAT_READDIR
if flag(internal-dev)
cpp-options: -DDEVBUILD
if flag(use-unfolds)
cpp-options: -DUSE_UNFOLDS_EVERYWHERE
if flag(use-folds)
cpp-options: -DUSE_FOLDS_EVERYWHERE
ghc-options: -Weverything
-Wno-implicit-prelude
-Wno-missing-deriving-strategies
-Wno-missing-exported-signatures
-Wno-missing-import-lists
-Wno-missing-local-signatures
-Wno-missing-safe-haskell-mode
-Wno-missed-specialisations
-Wno-all-missed-specialisations
-Wno-monomorphism-restriction
-Wno-prepositive-qualified-module
-Wno-unsafe
-Rghc-timing
if impl(ghc >= 9.2)
ghc-options:
-Wno-missing-kind-signatures
-Wno-redundant-bang-patterns
-Wno-operator-whitespace
if impl(ghc >= 9.8)
ghc-options:
-Wno-missing-role-annotations
if impl(ghc >= 9.10)
ghc-options:
-Wno-missing-poly-kind-signatures
if flag(has-llvm)
ghc-options: -fllvm
if flag(internal-dev)
ghc-options: -Wmissed-specialisations
-Wall-missed-specialisations
if flag(limit-build-mem)
ghc-options: +RTS -M1000M -RTS
if flag(internal-use-unliftio)
cpp-options: -DUSE_UNLIFTIO
common default-extensions
default-language: Haskell2010
-- GHC2024 may include more extensions than we are actually using, see the
-- full list below. We enable this to ensure that we are able to compile
-- with this i.e. there is no interference by other extensions.
-- Don't enforce GHC2024 and GHC2021 but We can support the build with them.
-- if impl(ghc >= 9.10)
-- default-language: GHC2024
-- if impl(ghc >= 9.2) && impl(ghc < 9.10)
-- default-language: GHC2021
if impl(ghc >= 8.10)
default-extensions: StandaloneKindSignatures
-- In GHC 2024
default-extensions:
BangPatterns
ConstraintKinds
DeriveDataTypeable
DeriveGeneric
DeriveTraversable
ExistentialQuantification
FlexibleContexts
FlexibleInstances
GeneralizedNewtypeDeriving
InstanceSigs
KindSignatures
LambdaCase
MultiParamTypeClasses
RankNTypes
ScopedTypeVariables
StandaloneDeriving
TupleSections
TypeApplications
TypeOperators
-- Not in GHC2024
CApiFFI
CPP
DefaultSignatures
MagicHash
RecordWildCards
-- TypeFamilies is required by IsList, IsMap type classes and
-- Unbox generic deriving code.
-- TypeFamilies
-- MonoLocalBinds, enabled by TypeFamilies and GHC2024, was
-- once found to cause runtime performance regressions which
-- does not seem to be the case anymore, but need more testing
-- to confirm. It is confirmed that it requires more memory
-- for compilation at least in some cases (Data.Fold.Window
-- benchmark on GHC-9.10.1 macOS). It also causes some
-- code to not compile, so has been disabled in specific
-- modules. Disabling this must come after TypeFamilies,
-- otherwise TypeFamilies will enable it again.
-- NoMonoLocalBinds
-- UndecidableInstances -- Does not show any perf impact
-- UnboxedTuples -- interferes with (#.)
if impl(ghc >= 8.6)
default-extensions: QuantifiedConstraints
common optimization-options
if flag(opt)
ghc-options: -O2
-fdicts-strict
-fspec-constr-recursive=16
-fmax-worker-args=16
-- For this to be effective it must come after the -O2 option
if flag(internal-dev) || flag(debug) || !flag(opt)
cpp-options: -DDEBUG
ghc-options: -fno-ignore-asserts
common threading-options
ghc-options: -threaded
-with-rtsopts=-N
-- We need optimization options here to optimize internal (non-inlined)
-- versions of functions. Also, we have some benchmarking inspection tests
-- part of the library when built with --benchmarks flag. Thos tests fail
-- if we do not use optimization options here. It was observed that due to
-- -O2 here some concurrent/nested benchmarks improved and others regressed.
-- We can investigate a bit more here why the regression occurred.
common lib-options
import: compile-options, optimization-options, default-extensions
-------------------------------------------------------------------------------
-- Library
-------------------------------------------------------------------------------
library
import: lib-options
js-sources: jsbits/clock.js
include-dirs:
src
, src/doctest
, src/Streamly/Internal/Data
, src/Streamly/Internal/Data/Array
, src/Streamly/Internal/Data/Stream
c-sources: src/Streamly/Internal/Data/MutArray/Lib.c
-- Prefer OS conditionals inside the source files rather than here,
-- conditionals here do not work well with cabal2nix.
if os(windows)
c-sources: src/Streamly/Internal/Data/Time/Clock/Windows.c
if os(darwin)
include-dirs: src/Streamly/Internal
c-sources: src/Streamly/Internal/Data/Time/Clock/Darwin.c
hs-source-dirs: src
exposed-modules:
-- Internal modules, listed roughly in bottom up
-- dependency order To view dependency graph:
-- graphmod | dot -Tps > deps.ps
-- streamly-base
Streamly.Internal.BaseCompat
, Streamly.Internal.Control.Exception
, Streamly.Internal.Control.Monad
, Streamly.Internal.Control.ForkIO
Streamly.Internal.Data.IsMap
, Streamly.Internal.System.IO
-- streamly-strict-data
, Streamly.Internal.Data.Tuple.Strict
, Streamly.Internal.Data.Maybe.Strict
, Streamly.Internal.Data.Either.Strict
, Streamly.Internal.Data.IOFinalizer
-- streamly-time
, Streamly.Internal.Data.Time.TimeSpec
, Streamly.Internal.Data.Time.Units
, Streamly.Internal.Data.Time.Clock
, Streamly.Internal.Data.Path
-- streamly-core-stream-types
, Streamly.Internal.Data.SVar.Type
, Streamly.Internal.Data.Refold.Type
, Streamly.Internal.Data.Producer
-- streamly-core-array-types
, Streamly.Internal.Data.MutByteArray
, Streamly.Internal.Data.CString
-- streaming and parsing Haskell types to/from bytes
, Streamly.Internal.Data.Binary.Parser
, Streamly.Internal.Data.Binary.Stream
-- May depend on streamly-core-stream
, Streamly.Internal.Data.MutArray
, Streamly.Internal.Data.MutArray.Generic
-- streamly-core-streams
, Streamly.Internal.Data.StreamK
-- StreamD depends on streamly-array-types
, Streamly.Internal.Data.Stream
-- streamly-core-data
, Streamly.Internal.Data.Builder
, Streamly.Internal.Data.Unfold
, Streamly.Internal.Data.Parser
, Streamly.Internal.Data.ParserK
, Streamly.Internal.Data.Pipe
, Streamly.Internal.Data.Scanr
-- streamly-containers (non-base)
, Streamly.Internal.Data.Fold
, Streamly.Internal.Data.Scanl
-- streamly-core-data-arrays
, Streamly.Internal.Data.Array.Generic
, Streamly.Internal.Data.Array
-- Unboxed IORef
, Streamly.Internal.Data.IORef
-- streamly-unicode-core
, Streamly.Internal.Unicode.Stream
, Streamly.Internal.Unicode.String
, Streamly.Internal.Unicode.Parser
, Streamly.Internal.Unicode.Array
-- Filesystem/IO
, Streamly.Internal.FileSystem.Path
, Streamly.Internal.FileSystem.Path.Seg
, Streamly.Internal.FileSystem.Path.Node
, Streamly.Internal.FileSystem.Path.SegNode
, Streamly.Internal.FileSystem.PosixPath
, Streamly.Internal.FileSystem.PosixPath.Seg
, Streamly.Internal.FileSystem.PosixPath.Node
, Streamly.Internal.FileSystem.PosixPath.SegNode
, Streamly.Internal.FileSystem.WindowsPath
, Streamly.Internal.FileSystem.WindowsPath.Seg
, Streamly.Internal.FileSystem.WindowsPath.Node
, Streamly.Internal.FileSystem.WindowsPath.SegNode
, Streamly.Internal.FileSystem.Handle
, Streamly.Internal.FileSystem.File.Common
, Streamly.Internal.FileSystem.Posix.Errno
, Streamly.Internal.FileSystem.Posix.File
, Streamly.Internal.FileSystem.Posix.ReadDir
, Streamly.Internal.FileSystem.Windows.ReadDir
, Streamly.Internal.FileSystem.Windows.File
, Streamly.Internal.FileSystem.FileIO
, Streamly.Internal.FileSystem.DirIO
-- RingArray Arrays
, Streamly.Internal.Data.RingArray
, Streamly.Internal.Data.RingArray.Generic
-- streamly-console
, Streamly.Internal.Console.Stdio
-- To be implemented
-- , Streamly.Data.Refold
-- Pre-release modules
-- , Streamly.Data.Pipe
-- , Streamly.Data.RingArray.Generic
-- , Streamly.Data.IORef
-- , Streamly.Data.List
-- , Streamly.Data.Time.Units
-- , Streamly.Data.Time.Clock
-- , Streamly.Data.Tuple.Strict
-- , Streamly.Data.Maybe.Strict
-- , Streamly.Data.Either.Strict
-- streamly-core released modules in alphabetic order
, Streamly.Console.Stdio
, Streamly.Control.Exception
, Streamly.Data.Array
, Streamly.Data.Array.Generic
, Streamly.Data.Fold
, Streamly.Data.MutArray
, Streamly.Data.MutArray.Generic
, Streamly.Data.MutByteArray
, Streamly.Data.Parser
, Streamly.Data.ParserK
, Streamly.Data.RingArray
, Streamly.Data.Scanl
, Streamly.Data.Stream
, Streamly.Data.StreamK
, Streamly.Data.Unfold
, Streamly.FileSystem.DirIO
, Streamly.FileSystem.FileIO
, Streamly.FileSystem.Handle
, Streamly.FileSystem.Path
, Streamly.Unicode.Parser
, Streamly.Unicode.Stream
, Streamly.Unicode.String
-- Deprecated in 0.3.0
, Streamly.Internal.FileSystem.File
, Streamly.Internal.FileSystem.Dir
, Streamly.FileSystem.Dir
, Streamly.FileSystem.File
-- Deprecated in 0.2.0
, Streamly.Internal.Data.MutArray.Stream
, Streamly.Internal.Data.Array.Stream
, Streamly.Internal.Data.Stream.StreamD
, Streamly.Internal.Data.Fold.Chunked
-- Only those modules should be here which are fully re-exported via some
-- other module.
other-modules:
Streamly.FileSystem.Path.Seg
, Streamly.FileSystem.Path.Node
, Streamly.FileSystem.Path.SegNode
, Streamly.Internal.Data.Fold.Step
, Streamly.Internal.Data.Fold.Type
, Streamly.Internal.Data.Fold.Combinators
, Streamly.Internal.Data.Fold.Container
, Streamly.Internal.Data.Fold.Exception
, Streamly.Internal.Data.Fold.Tee
, Streamly.Internal.Data.Fold.Window
, Streamly.Internal.Data.Scanl.Type
, Streamly.Internal.Data.Scanl.Window
, Streamly.Internal.Data.Scanl.Combinators
, Streamly.Internal.Data.Scanl.Container
, Streamly.Internal.Data.Parser.Type
, Streamly.Internal.Data.Parser.Tee
, Streamly.Internal.Data.ParserK.Type
, Streamly.Internal.Data.ParserDrivers
, Streamly.Internal.Data.Stream.Container
, Streamly.Internal.Data.Stream.Eliminate
, Streamly.Internal.Data.Stream.Exception
, Streamly.Internal.Data.Stream.Generate
, Streamly.Internal.Data.Stream.Lift
, Streamly.Internal.Data.Stream.Nesting
, Streamly.Internal.Data.Stream.Step
, Streamly.Internal.Data.Stream.Top
, Streamly.Internal.Data.Stream.Transform
, Streamly.Internal.Data.Stream.Transformer
, Streamly.Internal.Data.Stream.Type
, Streamly.Internal.Data.StreamK.Type
, Streamly.Internal.Data.StreamK.Transformer
, Streamly.Internal.Data.Pipe.Type
, Streamly.Internal.Data.Unfold.Type
, Streamly.Internal.Data.Unfold.Enumeration
, Streamly.Internal.Data.MutArray.Type
, Streamly.Internal.Data.Array.Type
, Streamly.Internal.Data.Array.Generic.Type
, Streamly.Internal.Data.MutByteArray.Type
, Streamly.Internal.Data.Unbox
, Streamly.Internal.Data.Unbox.TH
, Streamly.Internal.Data.Serialize.Type
, Streamly.Internal.Data.Serialize.TH
, Streamly.Internal.Data.Serialize.TH.RecHeader
, Streamly.Internal.Data.Serialize.TH.Common
, Streamly.Internal.Data.Serialize.TH.Bottom
, Streamly.Internal.Data.Producer.Type
, Streamly.Internal.Data.Producer.Source
, Streamly.Internal.Data.Time.Clock.Type
, Streamly.Internal.FileSystem.Path.Common
, Streamly.Internal.FileSystem.DirOptions
if flag(internal-dev)
exposed-modules:
Streamly.Internal.Data.StreamK.Alt
-- XXX Compilation needs to be fixed
-- , Streamly.Internal.Data.List
build-depends:
-- streamly-base
--
-- These dependencies can be reversed if we want
-- streamly-base to depend only on base.
--
-- Core libraries shipped with ghc, the min and max
-- constraints of these libraries should match with
-- the GHC versions we support. This is to make sure that
-- packages depending on the "ghc" package (packages
-- depending on doctest is a common example) can
-- depend on streamly.
ghc-prim >= 0.5.3 && < 0.14
, fusion-plugin-types >= 0.1 && < 0.2
, base >= 4.12 && < 4.23
, exceptions >= 0.8.0 && < 0.11
, transformers >= 0.5.5 && < 0.7
-- streamly-unicode-core
, template-haskell >= 2.14 && < 2.25
-- XXX to be removed
, filepath >= 1.4.2 && < 1.6
, containers >= 0.6.0 && < 0.9
, heaps >= 0.3 && < 0.5
if impl(ghc >= 9.0)
build-depends: ghc-bignum >= 1.0 && < 2
else
build-depends: integer-gmp >= 1.0 && < 1.2
if !flag(internal-use-unliftio)
build-depends: monad-control >= 1.0 && < 1.1
if os(windows)
build-depends: Win32 >= 2.6 && < 2.15