Skip to content

Commit ee0f250

Browse files
committed
Use strict types for applicatives
1 parent ac46e9b commit ee0f250

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

src/FSharpPlus/Control/Applicative.fs

+31-28
Original file line numberDiff line numberDiff line change
@@ -16,54 +16,51 @@ type Apply =
1616

1717
#if (!FABLE_COMPILER || FABLE_COMPILER_3) && !FABLE_COMPILER_4
1818

19-
static member inline ``<*>`` (f: '``Monad<'T->'U>`` , x: '``Monad<'T>`` , [<Optional>]_output: '``Monad<'U>`` , [<Optional>]_mthd:Default2) : '``Monad<'U>`` = Bind.InvokeOnInstance f (fun (x1: 'T->'U) -> Bind.InvokeOnInstance x (fun x2 -> Return.InvokeOnInstance (x1 x2)))
20-
static member inline ``<*>`` (f: '``Applicative<'T->'U>``, x: '``Applicative<'T>``, [<Optional>]_output: '``Applicative<'U>``, [<Optional>]_mthd:Default1) : '``Applicative<'U>`` = ((^``Applicative<'T->'U>`` or ^``Applicative<'T>`` or ^``Applicative<'U>``) : (static member (<*>) : _*_ -> _) f, x)
21-
22-
static member ``<*>`` (f: Lazy<'T->'U> , x: Lazy<'T> , [<Optional>]_output: Lazy<'U> , [<Optional>]_mthd: Apply) = Lazy.apply f x : Lazy<'U>
23-
static member ``<*>`` (f: seq<_> , x: seq<'T> , [<Optional>]_output: seq<'U> , [<Optional>]_mthd: Apply) = Seq.apply f x : seq<'U>
24-
static member ``<*>`` (f: NonEmptySeq<_> , x: NonEmptySeq<'T> , [<Optional>]_output: NonEmptySeq<'U> , [<Optional>]_mthd: Apply) = NonEmptySeq.apply f x : NonEmptySeq<'U>
25-
static member ``<*>`` (f: IEnumerator<_> , x: IEnumerator<'T> , [<Optional>]_output: IEnumerator<'U> , [<Optional>]_mthd: Apply) = Enumerator.map2 id f x : IEnumerator<'U>
26-
static member ``<*>`` (f: list<_> , x: list<'T> , [<Optional>]_output: list<'U> , [<Optional>]_mthd: Apply) = List.apply f x : list<'U>
27-
static member ``<*>`` (f: _ [] , x: 'T [] , [<Optional>]_output: 'U [] , [<Optional>]_mthd: Apply) = Array.apply f x : 'U []
28-
static member ``<*>`` (f: 'r -> _ , g: _ -> 'T , [<Optional>]_output: 'r -> 'U , [<Optional>]_mthd: Apply) = fun x -> let f' = f x in f' (g x) : 'U
29-
static member inline ``<*>`` ((a: 'Monoid, f) , (b: 'Monoid, x: 'T) , [<Optional>]_output: 'Monoid * 'U , [<Optional>]_mthd: Apply) = (Plus.Invoke a b, f x) : 'Monoid *'U
30-
static member inline ``<*>`` (struct (a: 'Monoid, f), struct (b: 'Monoid, x: 'T), [<Optional>]_output: struct ('Monoid * 'U), [<Optional>]_mthd: Apply) = struct (Plus.Invoke a b, f x) : struct ('Monoid * 'U)
19+
static member ``<*>`` ((f: Lazy<'T->'U> , x: Lazy<'T> , _output: Lazy<'U> ) , [<Optional>]_mthd: Apply) = Lazy.apply f x : Lazy<'U>
20+
static member ``<*>`` ((f: seq<_> , x: seq<'T> , _output: seq<'U> ) , [<Optional>]_mthd: Apply) = Seq.apply f x : seq<'U>
21+
static member ``<*>`` ((f: NonEmptySeq<_> , x: NonEmptySeq<'T> , _output: NonEmptySeq<'U> ) , [<Optional>]_mthd: Apply) = NonEmptySeq.apply f x : NonEmptySeq<'U>
22+
static member ``<*>`` ((f: IEnumerator<_> , x: IEnumerator<'T> , _output: IEnumerator<'U> ) , [<Optional>]_mthd: Apply) = Enumerator.map2 id f x : IEnumerator<'U>
23+
static member ``<*>`` ((f: list<_> , x: list<'T> , _output: list<'U> ) , [<Optional>]_mthd: Apply) = List.apply f x : list<'U>
24+
static member ``<*>`` ((f: _ [] , x: 'T [] , _output: 'U [] ) , [<Optional>]_mthd: Apply) = Array.apply f x : 'U []
25+
static member ``<*>`` ((f: 'r -> _ , g: _ -> 'T , _output: 'r -> 'U ) , [<Optional>]_mthd: Apply) = fun x -> let f' = f x in f' (g x) : 'U
26+
static member inline ``<*>`` (((a: 'Monoid, f) , (b: 'Monoid, x: 'T) , _output: 'Monoid * 'U ) , [<Optional>]_mthd: Apply) = (Plus.Invoke a b, f x) : 'Monoid *'U
27+
static member inline ``<*>`` ((struct (a: 'Monoid, f), struct (b: 'Monoid, x: 'T), _output: struct ('Monoid * 'U)), [<Optional>]_mthd: Apply) = struct (Plus.Invoke a b, f x) : struct ('Monoid * 'U)
3128
#if !FABLE_COMPILER
32-
static member ``<*>`` (f: Task<_> , x: Task<'T> , [<Optional>]_output: Task<'U> , [<Optional>]_mthd: Apply) = Task.apply f x : Task<'U>
29+
static member ``<*>`` ((f: Task<_> , x: Task<'T> , _output: Task<'U> ) , [<Optional>]_mthd: Apply) = Task.apply f x : Task<'U>
3330
#endif
3431
#if !NET45 && !NETSTANDARD2_0 && !FABLE_COMPILER
35-
static member ``<*>`` (f: ValueTask<_> , x: ValueTask<'T> , [<Optional>]_output: ValueTask<'U> , [<Optional>]_mthd: Apply) = ValueTask.apply f x : ValueTask<'U>
32+
static member ``<*>`` ((f: ValueTask<_> , x: ValueTask<'T> , _output: ValueTask<'U> ) , [<Optional>]_mthd: Apply) = ValueTask.apply f x : ValueTask<'U>
3633
#endif
37-
static member ``<*>`` (f: Async<_> , x: Async<'T> , [<Optional>]_output: Async<'U> , [<Optional>]_mthd: Apply) = Async.apply f x : Async<'U>
38-
static member ``<*>`` (f: option<_> , x: option<'T> , [<Optional>]_output: option<'U> , [<Optional>]_mthd: Apply) = Option.apply f x : option<'U>
39-
static member ``<*>`` (f: voption<_> , x: voption<'T> , [<Optional>]_output: voption<'U> , [<Optional>]_mthd: Apply) = ValueOption.apply f x : voption<'U>
40-
static member ``<*>`` (f: Result<_,'E> , x: Result<'T,'E> , [<Optional>]_output: Result<'b,'E> , [<Optional>]_mthd: Apply) = Result.apply f x : Result<'U,'E>
41-
static member ``<*>`` (f: Choice<_,'E> , x: Choice<'T,'E> , [<Optional>]_output: Choice<'b,'E> , [<Optional>]_mthd: Apply) = Choice.apply f x : Choice<'U,'E>
42-
static member inline ``<*>`` (KeyValue(a: 'Key, f), KeyValue(b: 'Key, x: 'T), [<Optional>]_output: KeyValuePair<'Key,'U>, [<Optional>]_mthd: Apply) : KeyValuePair<'Key,'U> = KeyValuePair (Plus.Invoke a b, f x)
43-
44-
static member ``<*>`` (f: Map<'Key,_> , x: Map<'Key,'T> , [<Optional>]_output: Map<'Key,'U> , [<Optional>]_mthd: Apply) : Map<'Key,'U> = Map (seq {
34+
static member ``<*>`` ((f: Async<_> , x: Async<'T> , _output: Async<'U> ) , [<Optional>]_mthd: Apply) = Async.apply f x : Async<'U>
35+
static member ``<*>`` ((f: option<_> , x: option<'T> , _output: option<'U> ) , [<Optional>]_mthd: Apply) = Option.apply f x : option<'U>
36+
static member ``<*>`` ((f: voption<_> , x: voption<'T> , _output: voption<'U> ) , [<Optional>]_mthd: Apply) = ValueOption.apply f x : voption<'U>
37+
static member ``<*>`` ((f: Result<_,'E> , x: Result<'T,'E> , _output: Result<'b,'E> ) , [<Optional>]_mthd: Apply) = Result.apply f x : Result<'U,'E>
38+
static member ``<*>`` ((f: Choice<_,'E> , x: Choice<'T,'E> , _output: Choice<'b,'E> ) , [<Optional>]_mthd: Apply) = Choice.apply f x : Choice<'U,'E>
39+
static member inline ``<*>`` ((KeyValue(a: 'Key, f), KeyValue(b: 'Key, x: 'T), _output: KeyValuePair<'Key,'U>), [<Optional>]_mthd: Apply) : KeyValuePair<'Key,'U> = KeyValuePair (Plus.Invoke a b, f x)
40+
41+
static member ``<*>`` ((f: Map<'Key,_> , x: Map<'Key,'T> , _output: Map<'Key,'U> ) , [<Optional>]_mthd: Apply) : Map<'Key,'U> = Map (seq {
4542
for KeyValue(k, vf) in f do
4643
match Map.tryFind k x with
4744
| Some vx -> yield k, vf vx
4845
| _ -> () })
4946

50-
static member ``<*>`` (f: Dictionary<'Key,_>, x: Dictionary<'Key,'T> , [<Optional>]_output: Dictionary<'Key,'U> , [<Optional>]_mthd: Apply) : Dictionary<'Key,'U> =
47+
static member ``<*>`` ((f: Dictionary<'Key,_>, x: Dictionary<'Key,'T> , _output: Dictionary<'Key,'U> ) , [<Optional>]_mthd: Apply) : Dictionary<'Key,'U> =
5148
let dct = Dictionary ()
5249
for KeyValue(k, vf) in f do
5350
match x.TryGetValue k with
5451
| true, vx -> dct.Add (k, vf vx)
5552
| _ -> ()
5653
dct
5754

58-
static member ``<*>`` (f: IDictionary<'Key,_>, x: IDictionary<'Key,'T> , [<Optional>]_output: IDictionary<'Key,'U> , [<Optional>]_mthd: Apply) : IDictionary<'Key,'U> =
55+
static member ``<*>`` ((f: IDictionary<'Key,_>, x: IDictionary<'Key,'T> , _output: IDictionary<'Key,'U> ) , [<Optional>]_mthd: Apply) : IDictionary<'Key,'U> =
5956
let dct = Dictionary ()
6057
for KeyValue(k, vf) in f do
6158
match x.TryGetValue k with
6259
| true, vx -> dct.Add (k, vf vx)
6360
| _ -> ()
6461
dct :> IDictionary<'Key,'U>
6562

66-
static member ``<*>`` (f: IReadOnlyDictionary<'Key,_>, x: IReadOnlyDictionary<'Key,'T> , [<Optional>]_output: IReadOnlyDictionary<'Key,'U> , [<Optional>]_mthd: Apply) : IReadOnlyDictionary<'Key,'U> =
63+
static member ``<*>`` ((f: IReadOnlyDictionary<'Key,_>, x: IReadOnlyDictionary<'Key,'T> , _output: IReadOnlyDictionary<'Key,'U> ) , [<Optional>]_mthd: Apply) : IReadOnlyDictionary<'Key,'U> =
6764
let dct = Dictionary ()
6865
for KeyValue(k, vf) in f do
6966
match x.TryGetValue k with
@@ -72,13 +69,13 @@ type Apply =
7269
dct :> IReadOnlyDictionary<'Key,'U>
7370

7471
#if !FABLE_COMPILER
75-
static member ``<*>`` (f: Expr<'T->'U>, x: Expr<'T>, [<Optional>]_output: Expr<'U>, [<Optional>]_mthd: Apply) = Expr.Cast<'U> (Expr.Application (f, x))
72+
static member ``<*>`` ((f: Expr<'T->'U>, x: Expr<'T>, _output: Expr<'U>), [<Optional>]_mthd: Apply) = Expr.Cast<'U> (Expr.Application (f, x))
7673
#endif
77-
static member ``<*>`` (f: ('T->'U) ResizeArray, x: 'T ResizeArray, [<Optional>]_output: 'U ResizeArray, [<Optional>]_mthd: Apply) = ResizeArray.apply f x : 'U ResizeArray
74+
static member ``<*>`` ((f: ('T->'U) ResizeArray, x: 'T ResizeArray, _output: 'U ResizeArray), [<Optional>]_mthd: Apply) = ResizeArray.apply f x : 'U ResizeArray
7875

7976
static member inline Invoke (f: '``Applicative<'T -> 'U>``) (x: '``Applicative<'T>``) : '``Applicative<'U>`` =
8077
let inline call (mthd : ^M, input1: ^I1, input2: ^I2, output: ^R) =
81-
((^M or ^I1 or ^I2 or ^R) : (static member ``<*>`` : _*_*_*_ -> _) input1, input2, output, mthd)
78+
((^M or ^I1 or ^I2 or ^R) : (static member ``<*>`` : (_*_*_)*_ -> _) (input1, input2, output), mthd)
8279
call(Unchecked.defaultof<Apply>, f, x, Unchecked.defaultof<'``Applicative<'U>``>)
8380

8481

@@ -89,6 +86,12 @@ type Apply =
8986

9087
#if (!FABLE_COMPILER || FABLE_COMPILER_3) && !FABLE_COMPILER_4
9188

89+
type Apply with
90+
static member inline ``<*>`` ((f: '``Monad<'T->'U>`` , x: '``Monad<'T>`` , _output: '``Monad<'U>`` ), [<Optional>]_mthd:Default2) : '``Monad<'U>`` = Bind.InvokeOnInstance f (fun (x1: 'T->'U) -> Bind.InvokeOnInstance x (fun x2 -> Return.InvokeOnInstance (x1 x2)))
91+
static member inline ``<*>`` ((_: ^t when ^t : null and ^t: struct, _: ^u when ^u : null and ^u: struct, _output: ^r when ^r : null and ^r: struct), _mthd: Default1) = id
92+
static member inline ``<*>`` ((f: '``Applicative<'T->'U>``, x: '``Applicative<'T>``, _output: '``Applicative<'U>``), [<Optional>]_mthd:Default1) : '``Applicative<'U>`` = ((^``Applicative<'T->'U>`` or ^``Applicative<'T>`` or ^``Applicative<'U>``) : (static member (<*>) : _*_ -> _) f, x)
93+
94+
9295
type Lift2 =
9396
inherit Default1
9497

0 commit comments

Comments
 (0)