[Theory]
[InlineData("")]
[InlineData("foo")]
[InlineData("bar")]
public void OptionalObeysSecondFunctorLaw(string value)
{
Func<string, int> f = s => s.Length;
Func<int, bool> g = i => i > 0;
Func<string, bool> composed = s => g(f(s));
var m = Optional.Some(value);
Assert.Equal(m.Select(composed), m.Select(f).Select(g));
}