Namespace TH\Maybe\Option

some

Return a Option\Some option containing $value.

none

Return a Option\None option containing no values.

fromValue

Transform a value into an Option. It will be a Some option containing $value if $value is different from $noneValue (default null)

Examples

self::assertEq(Option\fromValue("fruits"), Option\some("fruits"));
self::assertEq(Option\fromValue(null), Option\none());

of

Execute a callable and transform the result into an Option. It will be a Some option containing the result if it is different from $noneValue (default null).

Examples

Successful execution:

self::assertEq(Option\of(fn() => "fruits"), Option\some("fruits"));

Convertion of null to Option\None:

self::assertEq(Option\of(fn() => null), Option\none());

tryOf

Execute a callable and transform the result into an Option as Option\of() does but also return Option\None if it an exception matching $exceptionClass was thrown.

Examples

Successful execution:

self::assertEq(Option\tryOf(fn () => strtolower("FRUITS")), Option\some("fruits"));

Convertion of null to Option\None:

self::assertEq(Option\tryOf(fn() => null), Option\none());

Checked Exception:

self::assertEq(Option\tryOf(fn () => new \DateTimeImmutable("nope")), Option\none());

Unchecked Exception:

self::assertEq(Option\tryOf(fn () => 1 / 0), Option\none());
// @throws DivisionByZeroError Division by zero

flatten

Converts from Option<Option<T>> to Option<T>.

Examples

$x = Option\Some("vegetables");
self::assertSame(Option\flatten(Option\some($x)), $x);
self::assertSame(Option\flatten(Option\some(Option\none())), Option\none());
self::assertSame(Option\flatten(Option\none()), Option\none());

unzip

Unzips an option containing a tuple of two options.

If self is Some([a, b]) this method returns [Some(a), Some(b)]. Otherwise, [None, None] is returned.

$x = Option\Some("vegetables");
self::assertEq(Option\unzip(Option\some(["a", 2])), [Option\some("a"), Option\some(2)]);
self::assertSame(Option\unzip(Option\none()), [Option\none(), Option\none()]);

transpose

Transposes an Option of a Result into a Result of an Option.

None will be mapped to Ok(None). Some(Ok(_)) and Some(Err(_)) will be mapped to Ok(Some(_)) and Err(_).

use TH\Maybe\Result;

self::assertEq(Result\ok(Option\some(4)), Option\transpose(Option\some(Result\ok(4))));
self::assertEq(Result\err("meat"), Option\transpose(Option\some(Result\err("meat"))));
self::assertEq(Option\transpose(Option\none()), Result\ok(Option\none()));