packages feed

streamly-core-0.1.0: streamly-core.cabal

cabal-version:      2.2
name:               streamly-core
version:            0.1.0
synopsis:           Streaming, parsers, arrays and more
description:
  Streamly consists of two packages: "streamly-core" and "streamly".
  <https://hackage.haskell.org/package/streamly-core streamly-core>
  provides basic features, and depends only on GHC boot libraries (see
  note below), while
  <https://hackage.haskell.org/package/streamly streamly> provides
  higher-level features like concurrency, time, lifted exceptions,
  and networking. For documentation, visit the
  <https://streamly.composewell.com Streamly website>.
  .
  This package provides streams, arrays, parsers, unicode text, file
  IO, and console IO functionality.
  .
  Note: The dependencies "heaps" and "monad-control" are included in
  the package solely for backward compatibility, and will be removed in
  future versions.

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.7
                   , GHC==9.4.4
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/DocTestDataArray.hs
    src/DocTestDataFold.hs
    src/DocTestDataMutArray.hs
    src/DocTestDataMutArrayGeneric.hs
    src/DocTestDataParser.hs
    src/DocTestDataStream.hs
    src/DocTestDataStreamK.hs
    src/DocTestDataUnfold.hs

    -- This is duplicated
    src/Streamly/Internal/Data/Array/ArrayMacros.h
    src/assert.hs
    src/inline.hs

    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/0.1.0.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 dev
  description: Development build
  manual: True
  default: False

flag has-llvm
  description: Use llvm backend for code generation
  manual: True
  default: False

flag no-fusion
  description: Disable rewrite rules for stream fusion
  manual: True
  default: False

flag use-c-malloc
  description: Use C malloc instead of GHC malloc
  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 use-unliftio
  description: Use unliftio-core instead of monad-control
  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

-------------------------------------------------------------------------------
-- Common stanzas
-------------------------------------------------------------------------------

common compile-options
    default-language: Haskell2010

    if flag(no-fusion)
      cpp-options:    -DDISABLE_FUSION

    if flag(dev)
      cpp-options:    -DDEVBUILD

    if flag(use-unfolds)
      cpp-options:    -DUSE_UNFOLDS_EVERYWHERE

    if flag(use-folds)
      cpp-options:    -DUSE_FOLDS_EVERYWHERE

    if flag(use-c-malloc)
      cpp-options:    -DUSE_C_MALLOC

    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 flag(has-llvm)
      ghc-options: -fllvm

    if flag(dev)
      ghc-options:    -Wmissed-specialisations
                      -Wall-missed-specialisations

    if flag(limit-build-mem)
        ghc-options: +RTS -M1000M -RTS

    if flag(use-unliftio)
      cpp-options: -DUSE_UNLIFTIO

common default-extensions
    default-extensions:
        BangPatterns
        CApiFFI
        CPP
        ConstraintKinds
        DeriveDataTypeable
        DeriveGeneric
        DeriveTraversable
        ExistentialQuantification
        FlexibleContexts
        FlexibleInstances
        GeneralizedNewtypeDeriving
        InstanceSigs
        KindSignatures
        LambdaCase
        MagicHash
        MultiParamTypeClasses
        PatternSynonyms
        RankNTypes
        RecordWildCards
        ScopedTypeVariables
        StandaloneDeriving
        TupleSections
        TypeApplications
        TypeFamilies
        TypeOperators
        ViewPatterns

        -- MonoLocalBinds, enabled by TypeFamilies, causes performance
        -- regressions. Disable it. This must come after TypeFamilies,
        -- otherwise TypeFamilies will enable it again.
        NoMonoLocalBinds

        -- UndecidableInstances -- Does not show any perf impact
        -- UnboxedTuples        -- interferes with (#.)

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(dev) || flag(debug) || !flag(opt)
    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

    if impl(ghc >= 8.6)
      default-extensions: QuantifiedConstraints

    js-sources: jsbits/clock.js

    include-dirs:
          src
        , src/Streamly/Internal/Data/Array
        , src/Streamly/Internal/Data/Stream

    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.Type
                     , Streamly.Internal.Data.Time.Clock

                     -- streamly-core-stream-types
                     , Streamly.Internal.Data.SVar.Type
                     , Streamly.Internal.Data.Stream.StreamK.Type
                     , Streamly.Internal.Data.Fold.Step
                     , Streamly.Internal.Data.Refold.Type
                     , Streamly.Internal.Data.Fold.Type
                     , Streamly.Internal.Data.Stream.StreamD.Step
                     , Streamly.Internal.Data.Stream.StreamD.Type
                     , Streamly.Internal.Data.Unfold.Type
                     , Streamly.Internal.Data.Producer.Type
                     , Streamly.Internal.Data.Producer
                     , Streamly.Internal.Data.Producer.Source
                     , Streamly.Internal.Data.Parser.ParserK.Type
                     , Streamly.Internal.Data.Parser.ParserD.Type
                     , Streamly.Internal.Data.Pipe.Type

                     -- streamly-core-array-types
                     , Streamly.Internal.Data.Unboxed
                    -- Unboxed IORef
                     , Streamly.Internal.Data.IORef.Unboxed
                     -- May depend on streamly-core-stream
                     , Streamly.Internal.Data.Array.Mut.Type
                     , Streamly.Internal.Data.Array.Mut
                     , Streamly.Internal.Data.Array.Type
                     , Streamly.Internal.Data.Array.Generic.Mut.Type

                     -- streamly-core-streams
                     , Streamly.Internal.Data.Stream.StreamK
                     -- StreamD depends on streamly-array-types
                     , Streamly.Internal.Data.Stream.StreamD.Generate
                     , Streamly.Internal.Data.Stream.StreamD.Eliminate
                     , Streamly.Internal.Data.Stream.StreamD.Nesting
                     , Streamly.Internal.Data.Stream.StreamD.Transform
                     , Streamly.Internal.Data.Stream.StreamD.Exception
                     , Streamly.Internal.Data.Stream.StreamD.Lift
                     , Streamly.Internal.Data.Stream.StreamD.Top
                     , Streamly.Internal.Data.Stream.StreamD
                     , Streamly.Internal.Data.Stream.Common
                     , Streamly.Internal.Data.Stream

                     , Streamly.Internal.Data.Parser.ParserD.Tee
                     , Streamly.Internal.Data.Parser.ParserD

                     -- streamly-core-data
                     , Streamly.Internal.Data.Builder
                     , Streamly.Internal.Data.Unfold
                     , Streamly.Internal.Data.Unfold.Enumeration
                     , Streamly.Internal.Data.Fold.Tee
                     , Streamly.Internal.Data.Fold
                     , Streamly.Internal.Data.Fold.Chunked
                     , Streamly.Internal.Data.Fold.Window
                     , Streamly.Internal.Data.Parser
                     , Streamly.Internal.Data.Pipe

                     -- streamly-transformers (non-base)
                     , Streamly.Internal.Data.Stream.StreamD.Transformer
                     , Streamly.Internal.Data.Stream.StreamK.Transformer

                     -- streamly-containers (non-base)
                     , Streamly.Internal.Data.Stream.StreamD.Container
                     , Streamly.Internal.Data.Fold.Container

                     , Streamly.Internal.Data.Stream.Chunked

                     -- streamly-core-data-arrays
                     , Streamly.Internal.Data.Array.Generic
                     , Streamly.Internal.Data.Array
                     , Streamly.Internal.Data.Array.Mut.Stream

                     -- streamly-serde
                     , Streamly.Internal.Serialize.FromBytes
                     , Streamly.Internal.Serialize.ToBytes

                    -- streamly-unicode-core
                     , Streamly.Internal.Unicode.Stream
                     , Streamly.Internal.Unicode.String
                     , Streamly.Internal.Unicode.Parser
                     , Streamly.Internal.Unicode.Array

                     -- Filesystem/IO
                     , Streamly.Internal.FileSystem.Handle
                     , Streamly.Internal.FileSystem.File
                     , Streamly.Internal.FileSystem.Dir

                    -- Ring Arrays
                     , Streamly.Internal.Data.Ring.Unboxed
                     , Streamly.Internal.Data.Ring

                     -- streamly-console
                     , Streamly.Internal.Console.Stdio

                     -- To be implemented
                     -- , Streamly.Data.Refold
                     -- , Streamly.Data.Binary.Encode -- Stream types

                     -- Pre-release modules
                     -- , Streamly.Data.Fold.Window
                     -- , Streamly.Data.Pipe
                     -- , Streamly.Data.Array.Stream
                     -- , Streamly.Data.Array.Fold
                     -- , Streamly.Data.Array.Mut.Stream
                     -- , Streamly.Data.Ring
                     -- , Streamly.Data.Ring.Unboxed
                     -- , Streamly.Data.IORef.Unboxed
                     -- , Streamly.Data.List
                     -- , Streamly.Data.Binary.Decode
                     -- , Streamly.FileSystem.File
                     -- , Streamly.FileSystem.Dir
                     -- , 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
                     -- NOTE: these must be added to streamly.cabal as well
                     , Streamly.Console.Stdio
                     , Streamly.Data.Array
                     , Streamly.Data.Array.Generic
                     , Streamly.Data.MutArray
                     , Streamly.Data.MutArray.Generic
                     , Streamly.Data.Fold
                     , Streamly.Data.Parser
                     , Streamly.Data.ParserK
                     , Streamly.Data.Stream
                     , Streamly.Data.StreamK
                     , Streamly.Data.Unfold
                     , Streamly.FileSystem.Dir
                     , Streamly.FileSystem.File
                     , Streamly.FileSystem.Handle
                     , Streamly.Unicode.Parser
                     , Streamly.Unicode.Stream
                     , Streamly.Unicode.String

    if flag(dev)
      exposed-modules:
                        Streamly.Internal.Data.Stream.StreamK.Alt
                      , Streamly.Internal.Data.Stream.Type
                      , Streamly.Internal.Data.Stream.Eliminate
                      , Streamly.Internal.Data.Stream.Enumerate
                      , Streamly.Internal.Data.Stream.Generate
                      , Streamly.Internal.Data.Stream.Transform
                      , Streamly.Internal.Data.Stream.Bottom
                      , Streamly.Internal.Data.Stream.Exception
                      , Streamly.Internal.Data.Stream.Expand
                      , Streamly.Internal.Data.Stream.Lift
                      , Streamly.Internal.Data.Stream.Reduce
                      , Streamly.Internal.Data.Stream.Transformer
                      , Streamly.Internal.Data.Stream.StreamDK
                      , Streamly.Internal.Data.Stream.Zip
                      , Streamly.Internal.Data.Stream.Cross
                      , Streamly.Internal.Data.List
                      , Streamly.Data.Stream.Zip
                      --, Streamly.Internal.Data.Parser.ParserDK

    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.10
                     , fusion-plugin-types >= 0.1 && < 0.2
                     , base              >= 4.12  && < 4.19
                     , exceptions        >= 0.8.0 && < 0.11
                     , transformers      >= 0.5.5 && < 0.7
                     , filepath          >= 1.4.2 && < 1.5

                    -- streamly-unicode-core
                     , template-haskell  >= 2.14  && < 2.20

                     -- streamly-filesystem-core
                     , directory         >= 1.3.3 && < 1.4

                     -- XXX to be removed
                     , containers        >= 0.6.0 && < 0.7
                     , heaps             >= 0.3   && < 0.5
    if !flag(use-unliftio)
      build-depends:   monad-control     >= 1.0 && < 1.1