cabal-version:       2.2
                                          
name:                map-reduce-folds
version:             0.1.0.1
build-type:          Simple
synopsis:            foldl wrappers for map-reduce
description:         map-reduce-folds simplifies the building of folds to do map-reduce style computations on collections.  It breaks the map/reduce into an unpacking step where items may be filtered, transformed or "melted" (made into several new items), an assign step where the unpacked items are assigned keys, a grouping step where the assigned items are grouped by key and then a reduce step which is applied to each grouped subset.  Tools are provided to simplify building the individual steps and then "engines" are provided for combining them into efficient folds returning an assortment of containers.  The various pieces are replicated for effectful (monadic) steps producing effectful (monadic) folds.
bug-reports:         https://github.com/adamConnerSax/map-reduce-folds/issues
license:             BSD-3-Clause
license-file:        LICENSE
author:              Adam Conner-Sax
maintainer:          adam_conner_sax@yahoo.com
copyright:           2019 Adam Conner-Sax
category:            Control
extra-source-files:  ChangeLog.md
tested-with: GHC ==8.6.4 || ==8.6.2
             
flag dump-core
  description: Dump HTML for the core generated by GHC during compilation
  default:     False


source-repository head
    Type: git
    Location: https://github.com/adamConnerSax/map-reduce-folds
              
common deps
  build-depends: base                 >= 4.12.0 && < 4.13,
                 containers           >= 0.5.0 && < 0.7,
                 foldl                >= 1.4.5 && < 1.5,
                 profunctors          >= 5.3 && < 5.5,
                 text                 >= 1.2.3 && < 1.3,
                 unordered-containers >= 0.2.10 && < 0.3
               
library
  import: deps
  if flag(dump-core)
    build-depends: dump-core
    ghc-options: -fforce-recomp -fplugin=DumpCore -fplugin-opt DumpCore:core-html  
  ghc-options: -Wall -fspecialise-aggressively -funbox-strict-fields -fexpose-all-unfoldings
  exposed-modules: Control.MapReduce
                 , Control.MapReduce.Core
                 , Control.MapReduce.Simple
                 , Control.MapReduce.Engines
                 , Control.MapReduce.Engines.Streaming
                 , Control.MapReduce.Engines.Streamly
                 , Control.MapReduce.Engines.Vector
                 , Control.MapReduce.Engines.List
                 , Control.MapReduce.Engines.ParallelList

  build-depends:
                discrimination       >= 0.3   && < 0.4,
                hashable             >= 1.2.7 && < 1.4,
                hashtables           >= 1.2.0.0 && < 1.3.0.0,
                vector               >= 0.12.0 && < 0.13,
                parallel             >= 3.2.2 && < 3.3,
                split                >= 0.2.3 && < 0.3,
                streaming            >= 0.2.2 && < 0.3,
                streamly             >= 0.6.1 && < 0.7

  hs-source-dirs:      src
  default-language:    Haskell2010


test-suite map-reduce-folds-test
  type: exitcode-stdio-1.0
  main-is: TestAll.hs
  other-modules: Test1
  hs-source-dirs: test
  ghc-options: 
  build-depends:
                base
              , hedgehog >= 0.6.0 && < 1.1
              , map-reduce-folds 
              , containers
              , foldl
              
  default-language: Haskell2010
  
benchmark bench-map-reduce
  import: deps
  if flag(dump-core)
    build-depends: dump-core
    ghc-options: -fforce-recomp -fplugin=DumpCore -fplugin-opt DumpCore:core-html                    
  type:                exitcode-stdio-1.0
  hs-source-dirs:      bench
  other-modules:       
  ghc-options:         -O3 -fspecialise-aggressively -funbox-strict-fields -fexpose-all-unfoldings -fforce-recomp
--                       -threaded "-with-rtsopts=-N"
  main-is:             MapReduce.hs
  build-depends:       map-reduce-folds >= 0.1.0.0, 
                       criterion ,
                       deepseq ,
                       random
  default-language:    Haskell2010


executable listStats
    import: deps
    main-is: ListStats.hs
    hs-source-dirs: examples
    ghc-options: -Wall
    build-depends: map-reduce-folds -any
    default-language:    Haskell2010

executable readmeExample
    import: deps
    main-is: readmeExample.hs
    hs-source-dirs: examples
    ghc-options: -Wall
    build-depends: map-reduce-folds -any
    default-language:    Haskell2010