30 lines
1.1 KiB
Markdown
30 lines
1.1 KiB
Markdown
Currently, a RevertableProperty's Properties always both HasInfo. This
|
|
means that if a Property NoInfo is updated to be a RevertableProperty, and
|
|
someplace called ensureProperty on it, that will refuse to compile.
|
|
|
|
The workaround is generally to export the original NoInfo property under
|
|
a different name, so it can still be used with ensureProperty.
|
|
|
|
This could be fixed:
|
|
|
|
data RevertableProperty i1 i2 where
|
|
RProp :: Property i1 -> Property i2 -> RevertableProperty i1 i2
|
|
|
|
However, needing to write "RevertableProperty HasInfo NoInfo" is quite
|
|
a mouthful!
|
|
|
|
Since only 2 places in the propellor source code currently need to deal
|
|
with this, it doesn't currently seem worth making the change, unless a less
|
|
intrusive way can be found.
|
|
|
|
Probably related would be to make RevertableProperty a constructor in the
|
|
Property GADT, which would allow more property combinators to work on
|
|
RevertableProperties. That would look like:
|
|
|
|
data Propety i where
|
|
...
|
|
RProp :: Property i1 -> Property i2 -> Property (CInfo i1 i2)
|
|
|
|
In this case, there's only one Info/NoInfo encompassing both sides, and
|
|
so ensureProperty could only be used on it if both sides were NoInfo.
|