Skip to content

Commit 79d0614

Browse files
committed
+ missing Lift2 and Lift3
1 parent 87a5d27 commit 79d0614

File tree

15 files changed

+148
-5
lines changed

15 files changed

+148
-5
lines changed

src/FSharpPlus/Data/Cont.fs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ module Cont =
3535
let bind (f: 'T->_) (Cont x) = Cont (fun k -> x (fun a -> run (f a) k)) : Cont<'R,'U>
3636
let apply (Cont f) (Cont x) = Cont (fun k -> f (fun (f': 'T->_) -> x (k << f'))) : Cont<'R,'U>
3737

38+
let map2 (f: 'T -> 'U -> 'V) (Cont x) (Cont y) = Cont (fun k -> x (f >> fun k' -> y (k' >> k))) : Cont<'R, 'V>
39+
let map3 (f: 'T -> 'U -> 'V -> 'W) (Cont x) (Cont y) (Cont z) = Cont (fun k -> x (f >> fun k' -> y (k' >> fun k'' -> z (k'' >> k)))) : Cont<'R, 'W>
40+
3841

3942
/// Monad Transformer for Cont<'R,'T>
4043
type ContT<'r,'t> = Cont<'r,'t>
@@ -45,6 +48,12 @@ type Cont<'r,'t> with
4548
[<EditorBrowsable(EditorBrowsableState.Never)>]
4649
static member Map (x: Cont<'R,'T>, f) = Cont.map f x : Cont<'R,'U>
4750

51+
[<EditorBrowsable(EditorBrowsableState.Never)>]
52+
static member inline Lift2 (f: 'T->'U->'V, x: Cont<'R,'T>, y: Cont<'R,'U>) : Cont<'R,'V> = Cont.map2 f x y
53+
54+
[<EditorBrowsable(EditorBrowsableState.Never)>]
55+
static member inline Lift3 (f: 'T->'U->'V->'W, x: Cont<'R,'T>, y: Cont<'R,'U>, z: Cont<'R,'V>) : Cont<'R,'W> = Cont.map3 f x y z
56+
4857
static member (<*>) (f, x: Cont<'R,'T>) = Cont.apply f x : Cont<'R,'U>
4958
static member (>>=) (x, f: 'T->_) = Cont.bind f x : Cont<'R,'U>
5059

src/FSharpPlus/Data/Error.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ module ResultT =
5454
let inline apply (ResultT f:ResultT<'``Monad<'Result<('T -> 'U),'E>>``>) (ResultT x: ResultT<'``Monad<'Result<'T,'E>>``>) = ResultT (map Result.apply f <*> x) : ResultT<'``Monad<'Result<'U,'E>>``>
5555
let inline map (f: 'T->'U) (ResultT m: ResultT<'``Monad<'Result<'T,'E>>``>) = ResultT (map (Result.map f) m) : ResultT<'``Monad<'Result<('T -> 'U),'E>>``>
5656
let inline map2 (f: 'T->'U->'V) (ResultT x: ResultT<'``Monad<Result<'T,'E>>``>) (ResultT y: ResultT<'``Monad<Result<'U,'E>>``>) : ResultT<'``Monad<Result<'V,'E>>``> = ResultT (lift2 (Result.map2 f) x y)
57+
let inline map3 (f: 'T->'U->'V->'W) (ResultT x: ResultT<'``Monad<Result<'T,'E>>``>) (ResultT y: ResultT<'``Monad<Result<'U,'E>>``>) (ResultT z: ResultT<'``Monad<Result<'V,'E>>``>) : ResultT<'``Monad<Result<'W,'E>>``> = ResultT (lift3 (Result.map3 f) x y z)
5758

5859
type ResultT<'``monad<'result<'t,'e>>``> with
5960

@@ -65,6 +66,9 @@ type ResultT<'``monad<'result<'t,'e>>``> with
6566
[<EditorBrowsable(EditorBrowsableState.Never)>]
6667
static member inline Lift2 (f: 'T->'U->'V, x: ResultT<'``Monad<Result<'T,'E>``>, y: ResultT<'``Monad<Result<'U,'E>``>) : ResultT<'``Monad<Result<'V,'E>``> = ResultT.map2 f x y
6768

69+
[<EditorBrowsable(EditorBrowsableState.Never)>]
70+
static member inline Lift3 (f: 'T->'U->'V->'W, x: ResultT<'``Monad<Result<'T,'E>``>, y: ResultT<'``Monad<Result<'U,'E>``>, z: ResultT<'``Monad<Result<'V,'E>``>) : ResultT<'``Monad<Result<'W,'E>``> = ResultT.map3 f x y z
71+
6872
static member inline (<*>) (f: ResultT<'``Monad<'Result<('T -> 'U),'E>>``>, x: ResultT<'``Monad<'Result<'T,'E>>``>) = ResultT.apply f x : ResultT<'``Monad<'Result<'U,'E>>``>
6973
static member inline (>>=) (x: ResultT<'``Monad<'Result<'T,'E>>``>, f: 'T->ResultT<'``Monad<'Result<'U,'E>>``>) = ResultT.bind f x
7074

src/FSharpPlus/Data/Free.fs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ module Free =
6161
| Roll (x: ^``Functor<Free<'Functor<'T>,'T>>``) -> Roll (Map.Invoke (loop y: Free<'``Functor<'T>``,'T> -> _) x: '``Functor<Free<'Functor<'V>,'V>>``)
6262
loop y x
6363

64+
let inline map3 (f: 'T->'U->'V->'W) (x: Free<'``Functor<'T>``,'T>) (y: Free<'``Functor<'U>``,'U>) (z: Free<'``Functor<'V>``,'V>) : Free<'``Functor<'W>``,'W> =
65+
let rec loop (y: Free<_,_>) (x: Free<_,_>) (z: Free<_,_>) =
66+
match run x with
67+
| Pure x -> map2<'U,'V,'W,'``Functor<'U>``,'``Functor<Free<'Functor<'U>,'U>>``,'``Functor<Free<'Functor<'V>,'V>>``,'``Functor<Free<'Functor<'W>,'W>>``,'``Functor<'V>``,'``Functor<'W>``> (f x) y z : Free<'``Functor<'W>``,'W>
68+
| Roll (x: ^``Functor<Free<'Functor<'T>,'T>>``) -> Roll (Map.Invoke (loop y: Free<'``Functor<'T>``,'T> -> _) x: '``Functor<Free<'Functor<'W>,'W>>``)
69+
loop y x z
70+
6471
/// Folds the Free structure into a Monad
6572
let inline fold (f: '``Functor<'T>`` -> '``Monad<'T>``) (x: Free<'``Functor<'U>``,'U>) : '``Monad<'U>`` =
6673
let rec loop f x =
@@ -89,7 +96,13 @@ type Free<'``functor<'t>``,'t> with
8996
static member Return x = Pure x
9097
static member inline (>>=) (x: Free<'``Functor<'T>``,'T>, f: 'T -> Free<'``Functor<'U>``,'U>) = Free.bind f x : Free<'``Functor<'U>``,'U>
9198
static member inline (<*>) (f: Free<'``Functor<'T->'U>``,'T->'U>, x: Free<'``Functor<'T>``,'T>) = Free.apply f x : Free<'``Functor<'U>``,'U>
99+
100+
[<EditorBrowsable(EditorBrowsableState.Never)>]
92101
static member inline Lift2 (f, x: Free<'``Functor<'T>``,'T>, y: Free<'``Functor<'U>``,'U>) = Free.map2 f x y: Free<'``Functor<'V>``,'V>
102+
103+
[<EditorBrowsable(EditorBrowsableState.Never)>]
104+
static member inline Lift3 (f, x: Free<'``Functor<'T>``,'T>, y: Free<'``Functor<'U>``,'U>, z: Free<'``Functor<'V>``,'V>) = Free.map3 f x y z: Free<'``Functor<'W>``,'W>
105+
93106
static member Delay (x: unit -> Free<'``Functor<'T>``,'T>) = x ()
94107

95108
#endif

src/FSharpPlus/Data/Identity.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type Identity<'t> = Identity of 't with
1515
static member (>>=) (Identity x, f :'T -> Identity<'U>) = f x : Identity<'U>
1616
static member (<*>) (Identity (f : 'T->'U), Identity (x : 'T)) = Identity (f x) : Identity<'U>
1717
static member Lift2 (f, Identity (x: 'T), Identity (y: 'U)) = Identity (f x y) : Identity<'V>
18+
static member Lift3 (f, Identity (x: 'T), Identity (y: 'U), Identity (z: 'V)) = Identity (f x y z) : Identity<'W>
1819
static member Map (Identity x, f : 'T->'U) = Identity (f x) : Identity<'U>
1920
static member Zip (Identity x, Identity y) = Identity (x, y) : Identity<'T * 'U>
2021

src/FSharpPlus/Data/List.fs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ module ListT =
5656

5757
let inline bind (f: 'T-> ListT<'``Monad<list<'U>``>) (ListT m: ListT<'``Monad<list<'T>``>) = (ListT (m >>= mapM (run << f) >>= ((List.concat: list<_>->_) >> result)))
5858
let inline apply (ListT f: ListT<'``Monad<list<('T -> 'U)>``>) (ListT x: ListT<'``Monad<list<'T>``>) = ListT (map List.apply f <*> x) : ListT<'``Monad<list<'U>``>
59-
let inline lift2 (f: 'T->'U->'V) (ListT x: ListT<'``Monad<list<'T>``>) (ListT y: ListT<'``Monad<list<'U>``>) = ListT (lift2 (List.lift2 f) x y) : ListT<'``Monad<list<'V>``>
59+
let inline lift2 (f: 'T->'U->'V) (ListT x: ListT<'``Monad<list<'T>``>) (ListT y: ListT<'``Monad<list<'U>``>) = ListT (lift2 (List.lift2 f) x y) : ListT<'``Monad<list<'V>``>
60+
let inline lift3 (f: 'T->'U->'V->'W) (ListT x: ListT<'``Monad<list<'T>``>) (ListT y: ListT<'``Monad<list<'U>``>) (ListT z: ListT<'``Monad<list<'V>``>) = ListT (lift3 (List.lift3 f) x y z) : ListT<'``Monad<list<'W>``>
6061
let inline map (f: 'T->'U) (ListT m: ListT<'``Monad<list<'T>``>) = ListT (map (List.map f) m) : ListT<'``Monad<list<'U>``>
6162

6263
type ListT<'``monad<list<'t>>``> with
@@ -69,6 +70,9 @@ type ListT<'``monad<list<'t>>``> with
6970
[<EditorBrowsable(EditorBrowsableState.Never)>]
7071
static member inline Lift2 (f: 'T->'U->'V, x: ListT<'``Monad<list<'T>``>, y: ListT<'``Monad<list<'U>``>) = ListT.lift2 f x y : ListT<'``Monad<list<'V>``>
7172

73+
[<EditorBrowsable(EditorBrowsableState.Never)>]
74+
static member inline Lift3 (f: 'T->'U->'V->'W, x: ListT<'``Monad<list<'T>``>, y: ListT<'``Monad<list<'U>``>, z: ListT<'``Monad<list<'V>``>) = ListT.lift3 f x y z : ListT<'``Monad<list<'W>``>
75+
7276
static member inline (<*>) (f: ListT<'``Monad<list<('T -> 'U)>``>, x: ListT<'``Monad<list<'T>``>) = ListT.apply f x : ListT<'``Monad<list<'U>``>
7377
static member inline (>>=) (x: ListT<'``Monad<list<'T>``>, f: 'T -> ListT<'``Monad<list<'U>``>) = ListT.bind f x
7478

src/FSharpPlus/Data/Monoids.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ type Const<'t,'u> = Const of 't with
6060
static member inline Return (_: 'U) = Const (getZero ()) : Const<'T,'U>
6161
static member inline (<*>) (Const f: Const<'C,'T->'U>, Const x: Const<'C,'T>) = Const (plus f x) : Const<'C,'U>
6262
static member inline Lift2 (_: 'T->'U->'V, Const x: Const<'C,'T>, Const y: Const<'C,'U>) = Const (plus x y) : Const<'C,'V>
63+
static member inline Lift3 (_: 'T->'U->'V->'W, Const x: Const<'C,'T>, Const y: Const<'C,'U>, Const z: Const<'C,'V>) = Const (x ++ y ++ z) : Const<'C,'W>
6364

6465
// Contravariant
6566
static member Contramap (Const x: Const<'C,'T>, _: 'U->'T) = Const x : Const<'C,'U>
@@ -131,6 +132,9 @@ type Compose<'``functorF<'functorG<'t>>``> = Compose of '``functorF<'functorG<'t
131132
static member inline Lift2 (f: 'T -> 'U -> 'V, Compose (x: '``ApplicativeF<'ApplicativeG<'T>``), Compose (y: '``ApplicativeF<'ApplicativeG<'U>``)) =
132133
Compose (Lift2.Invoke (Lift2.Invoke f: '``ApplicativeG<'T>`` -> '``ApplicativeG<'U>`` -> '``ApplicativeG<'V>``) x y: '``ApplicativeF<'ApplicativeG<'V>``)
133134

135+
static member inline Lift3 (f: 'T -> 'U -> 'V -> 'W, Compose (x: '``ApplicativeF<'ApplicativeG<'T>``), Compose (y: '``ApplicativeF<'ApplicativeG<'U>``), Compose (z: '``ApplicativeF<'ApplicativeG<'V>``)) =
136+
Compose (Lift3.Invoke (Lift3.Invoke f: '``ApplicativeG<'T>`` -> '``ApplicativeG<'U>`` -> '``ApplicativeG<'V>`` -> '``ApplicativeG<'W>``) x y z: '``ApplicativeF<'ApplicativeG<'W>``)
137+
134138
// Alternative
135139
static member inline get_Empty () = Compose (getEmpty ()) : Compose<'``AlternativeF<'ApplicativeG<'T>``>
136140
static member inline (<|>) (Compose x, Compose y) = Compose (x <|> y) : Compose<'``AlternativeF<'ApplicativeG<'T>``>

src/FSharpPlus/Data/NonEmptyList.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ type NonEmptyList<'t> with
230230
{Head = r.Head; Tail = r.Tail}
231231

232232
static member Lift2 (f: 'T -> 'U -> 'V, x, y) = NonEmptyList.ofList (List.lift2 f (NonEmptyList.toList x) (NonEmptyList.toList y))
233+
static member Lift3 (f: 'T -> 'U -> 'V -> 'W, x, y, z) = NonEmptyList.ofList (List.lift3 f (NonEmptyList.toList x) (NonEmptyList.toList y) (NonEmptyList.toList z))
233234

234235
static member Extract {Head = h; Tail = _} = h : 't
235236

src/FSharpPlus/Data/Option.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ module OptionT =
3434
let inline apply (OptionT f: OptionT<'``Monad<option<('T -> 'U)>``>) (OptionT x: OptionT<'``Monad<option<'T>``>) = OptionT (map Option.apply f <*> x) : OptionT<'``Monad<option<'U>``>
3535
let inline map (f: 'T->'U) (OptionT m: OptionT<'``Monad<option<'T>``>) = OptionT (map (Option.map f) m) : OptionT<'``Monad<option<'U>``>
3636
let inline map2 (f: 'T->'U->'V) (OptionT x: OptionT<'``Monad<option<'T>>``>) (OptionT y: OptionT<'``Monad<option<'U>>``>) = OptionT (lift2 (Option.map2 f) x y) : OptionT<'``Monad<option<'V>>``>
37+
let inline map3 (f: 'T->'U->'V->'W) (OptionT x: OptionT<'``Monad<option<'T>>``>) (OptionT y: OptionT<'``Monad<option<'U>>``>) (OptionT z: OptionT<'``Monad<option<'V>>``>) = OptionT (lift3 (Option.map3 f) x y z) : OptionT<'``Monad<option<'W>>``>
3738

3839
type OptionT<'``monad<option<'t>>``> with
3940

@@ -45,6 +46,9 @@ type OptionT<'``monad<option<'t>>``> with
4546
[<EditorBrowsable(EditorBrowsableState.Never)>]
4647
static member inline Lift2 (f: 'T->'U->'V, x: OptionT<'``Monad<option<'T>``>, y: OptionT<'``Monad<option<'U>``>) = OptionT.map2 f x y : OptionT<'``Monad<option<'V>``>
4748

49+
[<EditorBrowsable(EditorBrowsableState.Never)>]
50+
static member inline Lift3 (f: 'T->'U->'V->'W, x: OptionT<'``Monad<option<'T>``>, y: OptionT<'``Monad<option<'U>``>, z: OptionT<'``Monad<option<'W>``>) = OptionT.map3 f x y z : OptionT<'``Monad<option<'W>``>
51+
4852
static member inline (<*>) (f: OptionT<'``Monad<option<('T -> 'U)>``>, x: OptionT<'``Monad<option<'T>``>) = OptionT.apply f x : OptionT<'``Monad<option<'U>``>
4953
static member inline (>>=) (x: OptionT<'``Monad<option<'T>``>, f: 'T -> OptionT<'``Monad<option<'U>``>) = OptionT.bind f x
5054

src/FSharpPlus/Data/ParallelArray.fs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,19 @@ module ParallelArray =
3939
if x.LongLength < y.LongLength then Bounded (Array.Parallel.mapi (fun i x -> f x y.[i]) x)
4040
else Bounded (Array.Parallel.mapi (fun i y -> f x.[i] y) y)
4141

42+
let map3 f x y z =
43+
match x, y, z with
44+
| Infinite x, Infinite y, Infinite z -> Infinite (f x y z)
45+
| Infinite x, Bounded _, Bounded _ -> map2 (f x) y z
46+
| Bounded _, Infinite y, Bounded _ -> map2 (fun x z -> f x y z) x z
47+
| Bounded _, Bounded _, Infinite z -> map2 (fun x y -> f x y z) x y
48+
| Bounded x, Infinite y, Infinite z -> Bounded (Array.Parallel.map (fun x -> f x y z) x)
49+
| Infinite x, Bounded y, Infinite z -> Bounded (Array.Parallel.map (fun y -> f x y z) y)
50+
| Infinite x, Infinite y, Bounded z -> Bounded (Array.Parallel.map (f x y) z)
51+
| Bounded x, Bounded y, Bounded z ->
52+
if x.LongLength < y.LongLength && x.LongLength <= z.LongLength then Bounded (Array.Parallel.mapi (fun i x -> f x y.[i] z.[i]) x)
53+
elif y.LongLength < x.LongLength && y.LongLength <= z.LongLength then Bounded (Array.Parallel.mapi (fun i y -> f x.[i] y z.[i]) y)
54+
else Bounded (Array.Parallel.mapi (fun i z -> f x.[i] y.[i] z) z)
4255
#endif
4356

4457
/// A type alias for ParallelArray<'T>
@@ -59,7 +72,13 @@ type ParallelArray<'t> with
5972
static member Return (x: 'a) = Infinite x
6073
#if !FABLE_COMPILER
6174
static member (<*>) (f: parray<'a->'b>, x: parray<_>) = ParallelArray.ap f x : parray<'b>
75+
76+
[<EditorBrowsable(EditorBrowsableState.Never)>]
6277
static member Lift2 (f, x: parray<'T>, y: parray<'U>) = ParallelArray.map2 f x y : parray<'V>
78+
79+
[<EditorBrowsable(EditorBrowsableState.Never)>]
80+
static member Lift3 (f, x: parray<'T>, y: parray<'U>, z: parray<'V>) = ParallelArray.map3 f x y z : parray<'W>
81+
6382
static member inline get_Zero () = Bounded (getZero ()) : parray<'m>
6483
static member inline (+) (x: parray<'m>, y: parray<'m>) = lift2 plus x y : parray<'m>
6584
#endif

src/FSharpPlus/Data/Reader.fs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ module Reader =
2323

2424
/// Combines two Readers into one by applying a mapping function.
2525
let map2 (mapping: 'T->'U->'V) (Reader x) (Reader y) = Reader (fun r -> mapping (x r) (y r)) : Reader<'R,'V>
26+
27+
/// Combines three Readers into one by applying a mapping function.
28+
let map3 (mapping: 'T->'U->'V->'W) (Reader x) (Reader y) (Reader z) = Reader (fun r -> mapping (x r) (y r) (z r)) : Reader<'R,'W>
2629

2730
/// Zips two Readers into one.
2831
let zip (x: Reader<'R,'T>) (y: Reader<'R,'U>) = map2 tuple2 x y : Reader<'R, 'T * 'U>
@@ -44,6 +47,12 @@ type Reader<'r,'t> with
4447
static member (>>=) (x: Reader<'R,'T>, f) = Reader.bind f x : Reader<'R,'U>
4548
static member (<*>) (f, x: Reader<'R,'T>) = Reader.apply f x : Reader<'R,'U>
4649

50+
[<EditorBrowsable(EditorBrowsableState.Never)>]
51+
static member Lift2 (f, x: Reader<'R,'T>, y: Reader<'R,'U>) = Reader.map2 f x y : Reader<'R,'V>
52+
53+
[<EditorBrowsable(EditorBrowsableState.Never)>]
54+
static member Lift3 (f, x: Reader<'R,'T>, y: Reader<'R,'U>, z: Reader<'R,'V>) = Reader.map3 f x y z : Reader<'R,'W>
55+
4756
static member get_Ask () = Reader.ask : Reader<'R,'R>
4857

4958
[<EditorBrowsable(EditorBrowsableState.Never)>]
@@ -82,6 +91,9 @@ module ReaderT =
8291
/// Combines two ReaderTs into one by applying a mapping function.
8392
let inline map2 (f: 'T->'U->'V) (ReaderT x: ReaderT<'R,'``Monad<'T>``>) (ReaderT y: ReaderT<'R,'``Monad<'U>``>) = ReaderT (fun a -> lift2 f (x a) (y a)) : ReaderT<'R,'``Monad<'V>``>
8493

94+
/// Combines three ReaderTs into one by applying a mapping function.
95+
let inline map3 (f: 'T->'U->'V->'W) (ReaderT x: ReaderT<'R,'``Monad<'T>``>) (ReaderT y: ReaderT<'R,'``Monad<'U>``>) (ReaderT z: ReaderT<'R,'``Monad<'V>``>) = ReaderT (fun a -> lift3 f (x a) (y a) (z a)) : ReaderT<'R,'``Monad<'W>``>
96+
8597
let inline apply (ReaderT (f: _ -> '``Monad<'T -> 'U>``)) (ReaderT (x: _->'``Monad<'T>``)) = ReaderT (fun r -> f r <*> x r) : ReaderT<'R, '``Monad<'U>``>
8698

8799
/// Zips two ReaderTs into one.
@@ -100,7 +112,10 @@ type ReaderT<'r,'``monad<'t>``> with
100112
static member inline Map (x: ReaderT<'R, '``Monad<'T>``>, f: 'T->'U) = ReaderT.map f x : ReaderT<'R, '``Monad<'U>``>
101113

102114
[<EditorBrowsable(EditorBrowsableState.Never)>]
103-
static member inline Lift2 (f: 'T->'U->'V, x: ReaderT<'S,'``Monad<'T>``>, y: ReaderT<'S,'``Monad<'U>``>) : ReaderT<'S,'``Monad<'V>``> = ReaderT.map2 f x y
115+
static member inline Lift2 (f: 'T->'U->'V, x: ReaderT<'R,'``Monad<'T>``>, y: ReaderT<'R,'``Monad<'U>``>) : ReaderT<'R,'``Monad<'V>``> = ReaderT.map2 f x y
116+
117+
[<EditorBrowsable(EditorBrowsableState.Never)>]
118+
static member inline Lift3 (f: 'T->'U->'V->'W, x: ReaderT<'R,'``Monad<'T>``>, y: ReaderT<'R,'``Monad<'U>``>, z: ReaderT<'R,'``Monad<'V>``>) : ReaderT<'R,'``Monad<'W>``> = ReaderT.map3 f x y z
104119

105120
static member inline (<*>) (f: ReaderT<_,'``Monad<'T -> 'U>``>, x: ReaderT<_,'``Monad<'T>``>) = ReaderT.apply f x : ReaderT<'R, '``Monad<'U>``>
106121
static member inline (>>=) (x: ReaderT<_,'``Monad<'T>``>, f: 'T->ReaderT<'R,'``Monad<'U>``>) = ReaderT.bind f x : ReaderT<'R, '``Monad<'U>``>

0 commit comments

Comments
 (0)