Package maintainers and Hackage trustees are allowed to edit certain bits
of package metadata after a release, without uploading a new tarball.
Note that the tarball itself is never changed, just the metadata that is
stored separately. For more information about metadata revisions, please
refer to the
Hackage Metadata Revisions FAQ.
| No. |
Time |
User |
SHA256 |
| -r5 |
2026-06-24T01:45:15Z |
BaldurBlondal |
b239538b286acc3017a09cd991d7ad174d7dac8e95e576ae78bd19f6ae0c2086
|
|
Changed description
from The <https://hackage.haskell.org/package/stock stock> plugin
provides a newtype
__@<https://hackage-content.haskell.org/package/stock-0.1.0.0/docs/Stock.html#t:Stock Stock>@__
for deriving and synthesising instances at compile
time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces
@<https://hackage.haskell.org/package/aeson aeson>@'s
@genericToJSON@ \/ @genericParseJSON
defaultOptions@. __stock-aeson__ is a drop-in for @deriving anyclass
(ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
<https://hackage.haskell.org/package/stock stock> companion packages include:
* __@<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@__: @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* __@<https://hackage.haskell.org/package/stock-hashable stock-hashable>@__: @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __@stock-aeson@__: @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* __@<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@__: @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* __@<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@__: @<https://hackage-content.haskell.org/package/profunctors-5.6.3/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
to The <https://hackage.haskell.org/package/stock stock> plugin
provides a newtype
__@<https://hackage-content.haskell.org/package/stock-0.1.0.0/docs/Stock.html#t:Stock Stock>@__
for deriving and synthesising instances at compile
time. __stock-aeson__ extends it to support
@<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces
@<https://hackage.haskell.org/package/aeson aeson>@'s
@genericToJSON@ \/ @genericParseJSON
defaultOptions@. __stock-aeson__ is a drop-in for @deriving anyclass
(ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON FromJSON>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
<https://hackage.haskell.org/package/stock stock> companion packages include:
* __@<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@__: @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* __@<https://hackage.haskell.org/package/stock-hashable stock-hashable>@__: @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __@stock-aeson@__: @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* __@<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@__: @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* __@<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@__: @<https://hackage-content.haskell.org/package/profunctors-5.6.3/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
|
| -r4 |
2026-06-24T00:23:27Z |
BaldurBlondal |
a0759f5a264da898a63d1c87bacbe392ca13984f6017dafee0a4ac82171b8a8a
|
|
Changed description
from The @<https://hackage.haskell.org/package/stock stock>@ plugin
provides a datatype for deriving and synthesising instances at
compile time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces
@<https://hackage.haskell.org/package/aeson aeson>@'s
@genericToJSON@ \/ @genericParseJSON
defaultOptions@. __stock-aeson__ is a drop-in for @deriving anyclass
(ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
@<https://hackage.haskell.org/package/stock-deepseq stock>@ companion packages include:
* @<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@: @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* @<https://hackage.haskell.org/package/stock-hashable stock-hashable>@: @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __stock-aeson__: @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* @<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@: @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* @<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@: @<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
to The <https://hackage.haskell.org/package/stock stock> plugin
provides a newtype
__@<https://hackage-content.haskell.org/package/stock-0.1.0.0/docs/Stock.html#t:Stock Stock>@__
for deriving and synthesising instances at compile
time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces
@<https://hackage.haskell.org/package/aeson aeson>@'s
@genericToJSON@ \/ @genericParseJSON
defaultOptions@. __stock-aeson__ is a drop-in for @deriving anyclass
(ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
<https://hackage.haskell.org/package/stock stock> companion packages include:
* __@<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@__: @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage-content.haskell.org/package/deepseq-1.5.2.0/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* __@<https://hackage.haskell.org/package/stock-hashable stock-hashable>@__: @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage-content.haskell.org/package/hashable-1.5.1.0/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __@stock-aeson@__: @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage-content.haskell.org/package/aeson-2.3.0.0/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* __@<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@__: @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage-content.haskell.org/package/QuickCheck-2.18.0.0/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* __@<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@__: @<https://hackage-content.haskell.org/package/profunctors-5.6.3/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
|
| -r3 |
2026-06-23T19:51:47Z |
BaldurBlondal |
7fab4483bf9390529a243f645a0f56d9b53818b794d567df1be15e218c1ae8d5
|
|
Changed description
from The @<https://hackage.haskell.org/package/stock stock>@ plugin
provides a datatype for deriving and synthesising instances at
compile time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces aeson's @genericToJSON@ \/
@genericParseJSON defaultOptions@ exactly, __stock-aeson__ is a
drop-in for @deriving anyclass (ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
@<https://hackage.haskell.org/package/stock-deepseq stock>@ companion packages include:
* @<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@: @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* @<https://hackage.haskell.org/package/stock-hashable stock-hashable>@: @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __stock-aeson__: @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* @<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@: @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* @<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@: @<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
to The @<https://hackage.haskell.org/package/stock stock>@ plugin
provides a datatype for deriving and synthesising instances at
compile time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces
@<https://hackage.haskell.org/package/aeson aeson>@'s
@genericToJSON@ \/ @genericParseJSON
defaultOptions@. __stock-aeson__ is a drop-in for @deriving anyclass
(ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
@<https://hackage.haskell.org/package/stock-deepseq stock>@ companion packages include:
* @<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@: @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* @<https://hackage.haskell.org/package/stock-hashable stock-hashable>@: @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __stock-aeson__: @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* @<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@: @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* @<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@: @<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
|
| -r2 |
2026-06-23T19:49:47Z |
BaldurBlondal |
bd7fc2efd323fd6463327547d6198d3673e757cdd05976eb3f2bf21a79161934
|
|
Changed description
from The <https://hackage.haskell.org/package/stock stock> plugin provides a datatype for deriving and synthesising
instances at compile time. @stock-aeson@ extends the <https://hackage.haskell.org/package/stock stock> with
support for @FromJSON@ and @ToJSON@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data T = MkT Int String
> deriving (ToJSON, FromJSON) via Stock T
The wire format reproduces aeson's @genericToJSON \/ genericParseJSON
defaultOptions@ exactly (a self-inverse tagged object,
@{ "tag": "Con", "contents": [field0, …] }@), so @stock-aeson@ is a drop-in
for @deriving stock Generic@ + @deriving anyclass (ToJSON, FromJSON)@.
> instance DeriveStock ToJSON ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at runtime):
parameter fields route through the supplied per-parameter encoders\/parsers, so
the bytes still match @aeson@'s generic deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
(@aeson@ has no @Generic2@; the arity-2 encoding is defined to coincide with
the value encoding when both per-parameter encoders are @toJSON@.)
to The @<https://hackage.haskell.org/package/stock stock>@ plugin
provides a datatype for deriving and synthesising instances at
compile time. __stock-aeson__ extends it to support
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@,
@<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data Person = P { name :: String, age :: Int }
> deriving (ToJSON, FromJSON) via
> Stock Person
The wire format reproduces aeson's @genericToJSON@ \/
@genericParseJSON defaultOptions@ exactly, __stock-aeson__ is a
drop-in for @deriving anyclass (ToJSON, FromJSON)@.
__stock-aeson__ provides six instances, that signal to the plugin
how to derive
@<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@.
> instance DeriveStock ToJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at
runtime): parameter fields route through the supplied per-parameter
encoders\/parsers, so the bytes still match @aeson@'s generic
deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
@<https://hackage.haskell.org/package/stock-deepseq stock>@ companion packages include:
* @<https://hackage.haskell.org/package/stock-deepseq stock-deepseq>@: @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData NFData>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData1 NFData1>@, @<https://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData2 NFData2>@
* @<https://hackage.haskell.org/package/stock-hashable stock-hashable>@: @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable.html#t:Hashable Hashable>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable1 Hashable1>@, @<https://hackage.haskell.org/package/hashable/docs/Data-Hashable-Lifted.html#t:Hashable2 Hashable2>@
* __stock-aeson__: @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON ToJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON1 ToJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:ToJSON2 ToJSON2>@; @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON FromJSON>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON1 FromJSON1>@, @<https://hackage.haskell.org/package/aeson/docs/Data-Aeson.html#t:FromJSON2 FromJSON2>@
* @<https://hackage.haskell.org/package/stock-quickcheck stock-quickcheck>@: @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary Arbitrary>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary1 Arbitrary1>@, @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:Arbitrary2 Arbitrary2>@; @<https://hackage.haskell.org/package/QuickCheck/docs/Test-QuickCheck.html#t:CoArbitrary CoArbitrary>@
* @<https://hackage.haskell.org/package/stock-profunctors stock-profunctors>@: @<https://hackage.haskell.org/package/profunctors/docs/Data-Profunctor.html#t:Profunctor Profunctor>@
|
| -r1 |
2026-06-23T16:28:58Z |
BaldurBlondal |
277e62dcc9da7843a6f15205ab1608751013632b651913493af30401a15f1767
|
|
Changed description
from The @stock@ plugin provides a datatype for deriving and synthesising
instances at compile time. @stock-aeson@ extends the @stock@ with
support for @FromJSON@ and @ToJSON@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data T = MkT Int String
> deriving (ToJSON, FromJSON) via Stock T
The wire format reproduces aeson's @genericToJSON \/ genericParseJSON
defaultOptions@ exactly (a self-inverse tagged object,
@{ "tag": "Con", "contents": [field0, …] }@), so @stock-aeson@ is a drop-in
for @deriving stock Generic@ + @deriving anyclass (ToJSON, FromJSON)@.
> instance DeriveStock ToJSON ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at runtime):
parameter fields route through the supplied per-parameter encoders\/parsers, so
the bytes still match @aeson@'s generic deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
(@aeson@ has no @Generic2@; the arity-2 encoding is defined to coincide with
the value encoding when both per-parameter encoders are @toJSON@.)
to The <https://hackage.haskell.org/package/stock stock> plugin provides a datatype for deriving and synthesising
instances at compile time. @stock-aeson@ extends the <https://hackage.haskell.org/package/stock stock> with
support for @FromJSON@ and @ToJSON@, and their higher-kinded variants.
> {-# options_ghc -fplugin Stock #-}
>
> {-# language DerivingVia #-}
>
> import Stock
> import Stock.Aeson
>
> data T = MkT Int String
> deriving (ToJSON, FromJSON) via Stock T
The wire format reproduces aeson's @genericToJSON \/ genericParseJSON
defaultOptions@ exactly (a self-inverse tagged object,
@{ "tag": "Con", "contents": [field0, …] }@), so @stock-aeson@ is a drop-in
for @deriving stock Generic@ + @deriving anyclass (ToJSON, FromJSON)@.
> instance DeriveStock ToJSON ..
> instance DeriveStock FromJSON ..
> instance DeriveStock1 ToJSON1 ..
> instance DeriveStock1 FromJSON1 ..
> instance DeriveStock2 ToJSON2 ..
> instance DeriveStock2 FromJSON2 ..
The lifted variants derive the same zero-cost way (no @Generic@ at runtime):
parameter fields route through the supplied per-parameter encoders\/parsers, so
the bytes still match @aeson@'s generic deriving.
> data F a = MkF a [a] deriving (ToJSON1, FromJSON1) via Stock1 F
> data P a b = MkP a b [b] deriving (ToJSON2, FromJSON2) via Stock2 P
(@aeson@ has no @Generic2@; the arity-2 encoding is defined to coincide with
the value encoding when both per-parameter encoders are @toJSON@.)
|
| -r0 |
2026-06-23T15:43:51Z |
BaldurBlondal |
d6d1bed18aac7777e788cc806921669445bb42f5caed112160a5cca38b9d4cc2
|
|
|