Rust-like Optional-type for PHP 7
$some = some(42);
$this->assertTrue($some->isSome());
$this->assertEquals(42, $some->unwrap());
$some = some(42);
$this->assertTrue($some->isSome($value));
$this->assertFalse($some->isNone());
$this->assertEquals(42, $value);
$none = none();
$this->assertTrue($none->isNone());
$this->assertFalse($none->isSome());
$none = none();
$this->assertTrue($none->isNone());
$this->assertFalse($none->isSome($value));
$this->assertNull($value);
$maybe = maybe(null);
$this->assertTrue($maybe->isNone());
$maybe = maybe(42);
$this->assertTrue($maybe->isSome());
$this->assertEquals(42, $maybe->unwrap());
$result = some(0)->ensure(function($value) {
return $value > 0;
});
$this->assertTrue($result->isNone());