public void Map3Example() { var userId = 1; OptionK.Applicative().Map3( UserRepository.GetUserDetails(userId), OrderRepository.GetOrders(), ShipmentRepository.GetShipments(), ReportManager.MakeReport) .Fix() .IsSome .ShouldBe(true); // The same with monadic bind var report = from user in UserRepository.GetUserDetails(userId) from orders in OrderRepository.GetOrders() from shipments in ShipmentRepository.GetShipments() select ReportManager.MakeReport(user, orders, shipments); report.IsSome.ShouldBe(true); }
public bool EqK <T>(IKind <OptionF, T> x, IKind <OptionF, T> y, IEq <T> eq) => OptionK.Eq(eq).Eqv(x.Fix(), y.Fix());
public static IEnumerable <object[]> ApplyLaws() => new ApplyLawsTests <OptionF, string, int, long>(OptionK.Apply(), OptionK.EqK()).Wrap();
public static IEnumerable <object[]> FunctorLaws() => new FunctorLawsTests <OptionF, string, int, long>(OptionK.Functor(), OptionK.EqK()).Wrap();
public static IEnumerable <object[]> InvariantLaws() => new InvariantLawsTests <OptionF, string, int, long>(OptionK.Invariant(), OptionK.EqK()).Wrap();
public static IEnumerable <object[]> MonadLaws() => new MonadLawsTests <OptionF, string, int, long>(OptionK.Monad(), OptionK.EqK()).Wrap();
public static IEnumerable <object[]> EqLaws() => new EqLawsTests <Option <string> >(OptionK.Eq(StringK.Eq())).Wrap();