Semigroups, Monoids, Zips, and AsRecord
#13
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces
Prairie.Semigroup
, allowing you toappendRecord :: (Record rec, FieldDict Semigroup rec) => rec -> rec -> rec
. We also getPrairie.Monoid
, giving youemptyRecord :: (Record rec, FieldDict Monoid rec) => rec
. These are pretty self-explanatory.appendRecord
is implemented withzipWithRecord :: (Record rec) => (forall ty. ty -> ty -> Field rec ty -> ty) -> rec -> rec -> rec
, also introduced here. This allows you to combine two records with a function specifying how to combine the values.Finally, we provide
AsRecord
, a newtype forDerivingVia
which lets you deriveMonoid
andSemigroup
instances using the behavior ofappendRecord
andemptyRecord
.Before submitting your PR, check that you've:
@since
declarations to the Haddock.stylish-haskell
and otherwise adhered to the style guide.After submitting your PR: