I noticed that if we do:
desaturatedColor =
Color.red
|> mapSaturation ((-) 0.3)
We end up with a color with saturation -0.7 instead of 0.7.
I think being able to pass ((-) x) is good. One workaround would be to chain the passed function with abs, it wouldn't break (*), (+) and always as generating negative makes no real sense (it would change the behavior of (+) -0.5 if the value is less than 0.5 but is it an issue?).