11using MorleyDev . Reactive . Monad ;
22using System . Collections . Generic ;
3+ using System . Threading . Tasks ;
4+ using System . Reactive . Threading . Tasks ;
35
46namespace System . Linq
57{
@@ -26,6 +28,30 @@ namespace System.Reactive.Linq
2628{
2729 public static class Monad
2830 {
31+ public static IO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , T > method )
32+ where TDisposable : IDisposable
33+ => MorleyDev . Reactive . Monad . IO . From ( Observable . Using ( factory , disposable => Observable . Return ( method ( disposable ) ) ) ) ;
34+
35+ public static IO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , IO < T > > method )
36+ where TDisposable : IDisposable
37+ => MorleyDev . Reactive . Monad . IO . From ( Observable . Using ( factory , disposable => method ( disposable ) ) ) ;
38+
39+ public static IO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , Task < T > > method )
40+ where TDisposable : IDisposable
41+ => MorleyDev . Reactive . Monad . IO . From ( Observable . Using ( factory , disposable => method ( disposable ) . ToObservable ( ) ) ) ;
42+
43+ public static MaybeIO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , Maybe < T > > method )
44+ where TDisposable : IDisposable
45+ => MorleyDev . Reactive . Monad . IO . From ( Observable . Using ( factory , disposable => Observable . Return ( method ( disposable ) ) ) ) ;
46+
47+ public static MaybeIO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , MaybeIO < T > > method )
48+ where TDisposable : IDisposable
49+ => MorleyDev . Reactive . Monad . MaybeIO . From ( Observable . Using ( factory , disposable => method ( disposable ) ) ) ;
50+
51+ public static MaybeIO < T > Using < T , TDisposable > ( Func < TDisposable > factory , Func < TDisposable , Task < Maybe < T > > > method )
52+ where TDisposable : IDisposable
53+ => MorleyDev . Reactive . Monad . IO . From ( Observable . Using ( factory , disposable => method ( disposable ) . ToObservable ( ) ) ) ;
54+
2955 public static IO < U > Select < U , T > ( this IO < T > self , Func < T , U > mapper ) => IO < U > . From ( self . AsObservable ( ) . Select ( mapper ) ) ;
3056 public static MaybeIO < T > Where < T > ( this IO < T > self , Func < T , bool > predicate ) => MaybeIO . From ( self . AsObservable ( ) . Where ( predicate ) ) ;
3157 public static IO < U > SelectMany < U , T > ( this IO < T > self , Func < T , IO < U > > mapper ) => IO < U > . From ( self . AsObservable ( ) . SelectMany ( mapper ) ) ;
0 commit comments