Wygeneruj opcję [T] w ScalaCheck

Próbuję wygenerować opcjonalne parametry w ScalaCheck, bez powodzenia.

Wydaje się, że nie ma bezpośredniego mechanizmu na to.Gen.containerOf[Option, Thing](thingGenerator) zawodzi, ponieważ nie może znaleźć ukrytegoBuildable[Thing, Option].

próbowałem

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

Ale to nie działa, ponieważlistOfN tworzy listę, która zawsze ma długość N. W rezultacie zawsze otrzymujęSome[Thing]. Podobnie,listOf1 nie działa, ponieważ (a) nie tworzy pustych list, ale także (b) jest nieefektywny, ponieważ nie mogę ustawić maksymalnego limitu liczby elementów.

Jak mogę wygenerowaćOption[Thing] to obejmuje Nones?

EDYTOWAĆ: Znalazłem rozwiązanie, ale to nie jest zwięzłe. Czy jest lepszy sposób niż to?

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

EDYCJA 2: Uogólniłem to na

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

Więc nie muszę pisać więcej niż raz. Ale na pewno jest to już w bibliotece, a ja właśnie to przegapiłem?

questionAnswers(2)

yourAnswerToTheQuestion