fun <A, B> laws( optional: Optional<A, B>, aGen: Arb<A>, bGen: Arb<B>, funcGen: Arb<(B) -> B>, eqa: (A, A) -> Boolean = { a, b -> a == b }, eqb: (B?, B?) -> Boolean = { a, b -> a == b }): List<Law> Warning: Use only when a Gen.constant() applies
fun <A, B> laws( optionalGen: Arb<Optional<A, B>>, aGen: Arb<A>, bGen: Arb<B>, funcGen: Arb<(B) -> B>, eqa: (A, A) -> Boolean = { a, b -> a == b }, eqb: (B?, B?) -> Boolean = { a, b -> a == b }): List<Law>