the third parameter is actually the validation error message, see impl of `shouldNotViolate`. maybe it makes sense to drop it as it's hard to get the tests right