[[!comment format=mdwn
 username="joey"
 subject="""comment 1"""
 date="2017-02-01T20:00:47Z"
 content="""
I wonder if it would be better to separate `suiteAvailablePinned`
into `suiteAvailable` and `suitePinned`? The latter could require
the former.

`pinnedTo` should probably be DebianLike not UnixLike.
And its `[String]` parameter ought to be `[Package]`.

Is `File.containsBlock` necessary? Seems that if you care about
ordering of blocks in the file, you generally should use
`File.hasContent` to specify the full content. Rather than using
/etc/apt/preferences.d/10propellor.pref for multiple properties,
you could use a separate file for each `pinnedTo'` with the parameters
encoded in the filename.

As to the TODO, I tried adding this:

	robustly' :: RevertableProperty DebianLike DebianLike -> RevertableProperty DebianLike DebianLike
	robustly' p = p `fallback` (update `before` p)

And the compiler tells me it's wrong because `update` is not revertable.
But of course, there's no need to revert apt-get update, so this compiles:

	robustly' :: RevertableProperty DebianLike DebianLike -> RevertableProperty DebianLike DebianLike
	robustly' p = p `fallback` ((update <!> (doNothing :: Property DebianLike)) `before` p)

Cleaning it up left an an exersise for the reader. Might be possible
to combine `robustly` and `robustly'` into a single function, but I'm
not able to see how immediately.

However.. Seems to me that whatever you wanted to use `robustly` with to
spur that TODO, you could just apply it to the first Property of the
RevertableProperty, and not to the second one?
"""]]
