Создать опцию [T] в ScalaCheck

Я пытаюсь создать дополнительные параметры в ScalaCheck, но безуспешно.

Кажется, нет прямого механизма для этого.Gen.containerOf[Option, Thing](thingGenerator) не удается, потому что не может найти неявноеBuildable[Thing, Option].

Я пытался

for {
  thing <- Gen.listOfN[Thing](1, thingGenerator)
} yield thing.headOption

Но это не работает, потому чтоlistOfN создает список, который всегда имеет длину N. В результате я всегда получаюSome[Thing], По аналогии,listOf1 не работает, потому что (а) он не создает пустые списки, но также (б) он неэффективен, потому что я не могу установить максимальное ограничение на количество элементов.

Как я могу генерироватьOption[Thing] что включает в себя Nones?

РЕДАКТИРОВАТЬЯ нашел решение, но оно не лаконично. Есть ли лучший способ, чем этот?

for {
  thing <- for {
    qty <- Gen.choose(0,1)
    things <- Gen.listOfN[Thing](qty, thingGenerator)
  } yield things.headOption
} yield thing

РЕДАКТИРОВАТЬ 2: Я обобщил это

def optional[T](g: Gen[T]) = 
  for (qty <- Gen.choose(0, 1); xs <- Gen.listOfN[T](qty, g)) yield xs.headOption

Поэтому мне не нужно писать это более одного раза. Но, конечно, это уже есть в библиотеке, и я просто пропустил это?

Ответы на вопрос(2)

Ваш ответ на вопрос