Skip to content

Commit 5c745d0

Browse files
authored
Fix unit inference take2 (#36)
1 parent 05f041e commit 5c745d0

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

src/IcedTasks/CancellableTask.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ module CancellableTasks =
145145
member inline _.Source
146146
(x: CancellationToken -> Task<_>)
147147
: CancellationToken -> Awaiter<TaskAwaiter<_>, _> =
148-
fun ct -> (x ct).GetAwaiter()
148+
fun ct -> Awaitable.GetTaskAwaiter(x ct)
149149

150150
member inline this.MergeSources
151151
(

src/IcedTasks/CancellableTaskBuilderBase.fs

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,9 @@ module CancellableTaskBase =
351351
[<InlineIfLambda>] getAwaiter: CancellationToken -> 'Awaiter,
352352
continuation:
353353
('TResult1 -> CancellableTaskBaseCode<'TOverall, 'TResult2, 'Builder>)
354-
) =
354+
) : CancellableTaskBaseCode<'TOverall, 'TResult2, 'Builder> =
355355

356-
CancellableTaskBaseCode<'TOverall, _, _>(fun sm ->
356+
CancellableTaskBaseCode<'TOverall, 'TResult2, 'Builder>(fun sm ->
357357
if __useResumableCode then
358358
//-- RESUMABLE CODE START
359359
sm.Data.ThrowIfCancellationRequested()
@@ -679,17 +679,46 @@ module CancellableTaskBase =
679679
///
680680
/// <remarks>This turns a Task&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
681681
///
682-
/// <returns>CancellationToken -> 'Awaiter</returns>
682+
/// <returns>'Awaiter</returns>
683+
member inline _.Source(task: TaskAwaiter<'T>) : Awaiter<TaskAwaiter<'T>, 'T> = task
684+
685+
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
686+
///
687+
/// <remarks>This turns a Task&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
688+
///
689+
/// <returns>'Awaiter</returns>
683690
member inline _.Source(task: Task<'T>) : Awaiter<TaskAwaiter<'T>, 'T> =
684-
task.GetAwaiter()
691+
Awaitable.GetTaskAwaiter task
685692

686693
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
687694
///
688695
/// <remarks>This turns a ColdTask&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
689696
///
690697
/// <returns>CancellationToken -> 'Awaiter</returns>
691-
member inline _.Source([<InlineIfLambda>] task: unit -> Task<'TResult1>) =
692-
(fun (ct: CancellationToken) -> (task ()).GetAwaiter())
698+
member inline _.Source
699+
([<InlineIfLambda>] task: unit -> TaskAwaiter<'T>)
700+
: CancellationToken -> Awaiter<TaskAwaiter<'T>, 'T> =
701+
(fun (ct: CancellationToken) -> (task ()))
702+
703+
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
704+
///
705+
/// <remarks>This turns a ColdTask&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
706+
///
707+
/// <returns>CancellationToken -> 'Awaiter</returns>
708+
member inline _.Source
709+
([<InlineIfLambda>] task: unit -> Task<'T>)
710+
: CancellationToken -> Awaiter<TaskAwaiter<'T>, 'T> =
711+
(fun (ct: CancellationToken) -> Awaitable.GetTaskAwaiter(task ()))
712+
713+
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
714+
///
715+
/// <remarks>This turns a CancellableTask&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
716+
///
717+
/// <returns>CancellationToken -> 'Awaiter</returns>
718+
member inline _.Source
719+
([<InlineIfLambda>] task: CancellationToken -> TaskAwaiter<'T>)
720+
: CancellationToken -> Awaiter<TaskAwaiter<'T>, 'T> =
721+
(fun ct -> (task ct))
693722

694723
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
695724
///
@@ -699,12 +728,14 @@ module CancellableTaskBase =
699728
member inline _.Source
700729
([<InlineIfLambda>] task: CancellationToken -> Task<'T>)
701730
: CancellationToken -> Awaiter<TaskAwaiter<'T>, 'T> =
702-
(fun ct -> (task ct).GetAwaiter())
731+
(fun ct -> Awaitable.GetTaskAwaiter(task ct))
703732

704733
/// <summary>Allows the computation expression to turn other types into CancellationToken -> 'Awaiter</summary>
705734
///
706735
/// <remarks>This turns a Async&lt;'T&gt; into a CancellationToken -> 'Awaiter.</remarks>
707736
///
708737
/// <returns>CancellationToken -> 'Awaiter</returns>
709-
member inline this.Source(computation: Async<'TResult1>) =
738+
member inline this.Source
739+
(computation: Async<'T>)
740+
: CancellationToken -> Awaiter<TaskAwaiter<'T>, 'T> =
710741
this.Source(Async.AsCancellableTask(computation))

src/IcedTasks/TaskBuilderBase.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ module TaskBase =
463463
/// <remarks>This turns a Task&lt;'T&gt; into a 'Awaiter.</remarks>
464464
///
465465
/// <returns>'Awaiter</returns>
466-
member inline _.Source(task: Task<'T>) = task.GetAwaiter()
466+
member inline _.Source(task: Task<'T>) = Awaitable.GetTaskAwaiter task
467467

468468
/// <summary>Allows the computation expression to turn other types into 'Awaiter</summary>
469469
///

0 commit comments

Comments
 (0)