packages feed

Cabal revisions of grab-0.0.0.8

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-cabal-version: 3.0--name: grab-version: 0.0.0.8--synopsis: Applicative non-linear consumption-category: Control--description:-    == The Grab type--    A grab consumes some portion (none, part, or all) of-    its input @bag@, and returns a @residue@ consisting of-    the unconsumed input, some monoidal @log@ (e.g. a list-    of error messages), and some @desideratum@ (the object-    of desire) produced from the consumed input, or-    @Nothing@ if the grab failed.--    > newtype Grab bag residue log desideratum =-    >   Grab (-    >     bag -> (residue, log, Maybe desideratum)-    >   )--    Grabs are useful as parsers for inputs such as JSON-    objects or lists of form parameters, where the input data-    is not necessarily given linearly in the same order in-    which we want to consume it.--    == Applicative composition--    A @Simple@ grab (where the @bag@ and @residue@ are the-    same type) has an @Applicative@ instance.--    > instance (bag ~ residue, Monoid log) =>-    >     Applicative (Grab bag residue log)--    For example, we can create two simple list grabs, one that-    grabs multiples of two, and the other that grabs multiples-    of three:--    > twos, threes :: Monoid log =>-    >     Control.Grab.Simple [Integer] log [Integer]-    > twos   = partition (Data.List.partition (\x -> mod x 2 == 0))-    > threes = partition (Data.List.partition (\x -> mod x 3 == 0))--    > λ> runGrabMaybe ((,) <$> twos @() <*> threes @()) [1..10]-    > Just ([2,4,6,8,10],[3,9])--    Notice that the second part of the resulting tuple contains only-    the /odd/ multiples of three. Because @twos@ runs first, it-    consumes @6@ before the @threes@ can get it.--    == Pipeline composition--    @a / b@ is a pipeline of two grabs, where the desideratum from-    @a@ is the @bag@ for @b@.-    .-    > (/) :: Semigroup log-    >     => Grab bag residue log x-    >     -> Grab x  _residue log desideratum-    >     -> Grab bag residue log desideratum--    > λ> runGrabMaybe (twos @() / threes @()) [1..10]-    > Just [6]--    > λ> runGrabMaybe ((,) <$> (twos @() / threes @()) <*> threes @()) [1..10]-    > Just ([6],[3,9])--homepage:    https://github.com/typeclasses/grab-bug-reports: https://github.com/typeclasses/grab/issues--author:     Chris Martin-maintainer: Chris Martin, Julie Moronuki--copyright: 2021 Mission Valley Software LLC-license: MIT-license-file: license.txt--extra-source-files:-    changelog.md--common base-    default-language: Haskell2010-    build-depends:-        base ^>= 4.12 || ^>= 4.13 || ^>= 4.14 || ^>= 4.15 || ^>= 4.16--library-    import: base-    hs-source-dirs: src-    ghc-options: -fdefer-typed-holes-    exposed-modules: Control.Grab--test-suite grab-test-    import: base-    type: exitcode-stdio-1.0-    hs-source-dirs: test-    main-is: Main.hs--    build-depends:-        grab-      , hedgehog ^>= 1.0 || ^>= 1.1---- This benchmark runs with a tightly limited stack size--- to detect space leaks, as described by:--- http://neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html------ Run it like this for a stack trace:------     stack bench grab:space --profile --ba "+RTS -xc"----benchmark grab-space-bench-    import: base-    type: exitcode-stdio-1.0-    hs-source-dirs: bench/space-    main-is: Main.hs-    ghc-options: "-with-rtsopts=-K1K"--    build-depends: grab--benchmark grab-time-bench-    import: base-    type: exitcode-stdio-1.0-    hs-source-dirs: bench/time-    main-is: Main.hs--    build-depends:-        criterion ^>= 1.5-      , grab+cabal-version: 3.0
+
+name: grab
+version: 0.0.0.8
+x-revision: 1
+
+synopsis: Applicative non-linear consumption
+category: Control
+
+description:
+    == The Grab type
+
+    A grab consumes some portion (none, part, or all) of
+    its input @bag@, and returns a @residue@ consisting of
+    the unconsumed input, some monoidal @log@ (e.g. a list
+    of error messages), and some @desideratum@ (the object
+    of desire) produced from the consumed input, or
+    @Nothing@ if the grab failed.
+
+    > newtype Grab bag residue log desideratum =
+    >   Grab (
+    >     bag -> (residue, log, Maybe desideratum)
+    >   )
+
+    Grabs are useful as parsers for inputs such as JSON
+    objects or lists of form parameters, where the input data
+    is not necessarily given linearly in the same order in
+    which we want to consume it.
+
+    == Applicative composition
+
+    A @Simple@ grab (where the @bag@ and @residue@ are the
+    same type) has an @Applicative@ instance.
+
+    > instance (bag ~ residue, Monoid log) =>
+    >     Applicative (Grab bag residue log)
+
+    For example, we can create two simple list grabs, one that
+    grabs multiples of two, and the other that grabs multiples
+    of three:
+
+    > twos, threes :: Monoid log =>
+    >     Control.Grab.Simple [Integer] log [Integer]
+    > twos   = partition (Data.List.partition (\x -> mod x 2 == 0))
+    > threes = partition (Data.List.partition (\x -> mod x 3 == 0))
+
+    > λ> runGrabMaybe ((,) <$> twos @() <*> threes @()) [1..10]
+    > Just ([2,4,6,8,10],[3,9])
+
+    Notice that the second part of the resulting tuple contains only
+    the /odd/ multiples of three. Because @twos@ runs first, it
+    consumes @6@ before the @threes@ can get it.
+
+    == Pipeline composition
+
+    @a / b@ is a pipeline of two grabs, where the desideratum from
+    @a@ is the @bag@ for @b@.
+    .
+    > (/) :: Semigroup log
+    >     => Grab bag residue log x
+    >     -> Grab x  _residue log desideratum
+    >     -> Grab bag residue log desideratum
+
+    > λ> runGrabMaybe (twos @() / threes @()) [1..10]
+    > Just [6]
+
+    > λ> runGrabMaybe ((,) <$> (twos @() / threes @()) <*> threes @()) [1..10]
+    > Just ([6],[3,9])
+
+homepage:    https://github.com/typeclasses/grab
+bug-reports: https://github.com/typeclasses/grab/issues
+
+author:     Chris Martin
+maintainer: Chris Martin, Julie Moronuki
+
+copyright: 2021 Mission Valley Software LLC
+license: MIT
+license-file: license.txt
+
+extra-source-files:
+    changelog.md
+
+common base
+    default-language: Haskell2010
+    build-depends:
+        base ^>= 4.12 || ^>= 4.13 || ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17
+
+library
+    import: base
+    hs-source-dirs: src
+    ghc-options: -fdefer-typed-holes
+    exposed-modules: Control.Grab
+
+test-suite grab-test
+    import: base
+    type: exitcode-stdio-1.0
+    hs-source-dirs: test
+    main-is: Main.hs
+
+    build-depends:
+        grab
+      , hedgehog ^>= 1.0 || ^>= 1.1 || ^>= 1.2
+
+-- This benchmark runs with a tightly limited stack size
+-- to detect space leaks, as described by:
+-- http://neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html
+--
+-- Run it like this for a stack trace:
+--
+--     stack bench grab:space --profile --ba "+RTS -xc"
+--
+benchmark grab-space-bench
+    import: base
+    type: exitcode-stdio-1.0
+    hs-source-dirs: bench/space
+    main-is: Main.hs
+    ghc-options: "-with-rtsopts=-K1K"
+
+    build-depends: grab
+
+benchmark grab-time-bench
+    import: base
+    type: exitcode-stdio-1.0
+    hs-source-dirs: bench/time
+    main-is: Main.hs
+
+    build-depends:
+        criterion ^>= 1.5
+      , grab