Fix anymutable errors with self-referencing types #72
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.
I currently have trouble using
fmap
with data structures that containsMeasurements.Measurement
objects. The reason is thatMeasurement
(which subtypesReal
) contains a fieldDerivatives
:Due to the nature of the type, this
parent
field may be undefined - quite normal for such datatypes.(Measurements.Derivatives
is a variation ofBase.ImmutableDict
, apparently).This causes
Functors.anymutable
to fail, due toWhile I have this problem with
Measurement
specifically, I think it makes sense to fix it here, instead of proposing a Functors extension to Measurements. Also, as expected (see above) the same problem occurs withBase.ImmutableDict
:A simple fix would be checking with
isdefined
(if the field is not defined, it obviously doesn't point to mutable content):I worry that this may reduce the type stability of
anymutable
though. So in this PR I'm proposingIn the end, mutability is a type property, I'd say: if
T
itself is not directly mutable, and all of it's fields except references toT
are immutable, then I think it's safe to considerx
immutable as a whole.