Separate monoidal part of strict layers #3330
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.
Overview
This PR separates the monoidal part of
StrictLayer
s -- the separate collections of geometries -- from the... I guess "metadata", you know, the other part.It's useful, e.g., if you're getting geometries from somewhere and trying to combine everything into a vector tile layer. The collections of geometries form a lawful monoid, but
StrictLayer
as it's currently implemented does not.Checklist
docs
guides update, if necessaryDemo
I would have used this here instead of hand-rolling a special
Monoid
for strict layer for each z/x/y tripleNotes
I'd like to prove this is a lawful monoid with
discipline
-- e.g. https://github.com/raster-foundry/raster-foundry/blob/develop/app-backend/datamodel/src/test/scala/ScopeSpec.scala#L126. It's pretty easy, but it would require new testing deps and alsoArbitrary
instances for everything going up the dependency chain from theMVTFeature
s, which seems like a lot for what is in practice a very fancyMap[String, Seq[A]]
.