A type for representing values with an additional bit saying
whether the value is "just a recommendation" (to be used only if
nothing better comes along) or a "committment" (to certainly be
used, overriding merely recommended values), along with
corresponding Semigroup and Monoid instances.

Documentation

A value of type Recommend a consists of a value of type a
wrapped up in one of two constructors. The Recommend
constructor indicates a "non-committal recommendation"---that
is, the given value should be used if no other/better values are
available. The Commit constructor indicates a
"commitment"---a value which should definitely be used,
overriding any Recommended values.