明天我要对协程进行考试,但问题是该章的讲义已被取消,不能替代。因此,我决定独自学习协程,因为这很难。
我有老师教过的Typescript代码示例,但问题是该示例包含错误,而且我不知道如何解决。
type Coroutine<s, e, a> = Fun<s, Either<NoRes<s, e, a>, Pair<a, s>>>
type NoRes<s, e, a> = Either<e, Continuation<s, e, a>>
type Continuation<s, e, a> = Pair<s, Coroutine<s, e, a>>
我得到的错误是:
类型别名“协程”循环引用自身
类型别名'NoRes'循环引用自身
类型别名'Continuation'循环引用自身
我理解为什么会发生这种情况,因为Coroutine
的类型为NoRes
,NoRes
的类型为Continuation
,在这里,我们回到了完成这一圈的位置:{ {1}}的类型为Continuation
。
我不了解的是如何解决此问题,替代方案是如何实现协程。那么,有没有人比上面的例子更好,更可行?
依赖项:
乐趣:
Coroutine
要么:
type Fun<a, b> = {
f: (_: a) => b
then: <c>(this: Fun<a, b>, g: Fun<b, c>) => Fun<a, c>
}
配对:
type Either<a, b> = {
kind: "left"
value: a
} | {
kind: "right"
value: b
}
答案 0 :(得分:1)
明天我要参加相同的考试,并且也遇到错误。
我设法通过创建一个专门为续程协同开发的接口来使其编译,如下所示:
type Coroutine<s,e,a> = Fun<s, Either<NoRes<s,e,a>,Pair<a,s>>>
type NoRes<s,e,a> = Either<e,Continuation<s,e,a>>
type Continuation<s,e,a> = Pair<s,ContinuedCoroutine<s,e,a>>
interface ContinuedCoroutine<s,e,a> extends Coroutine<s,e,a> { }
感觉像一个变通方法,但是它也会使单元编译。我仍在尝试弄清楚join,map等。
This可能会帮助您进一步。如果您找到更好的方法,请告诉我;)