У меня завтра экзамен на сопрограммы, но проблема в том, что лекция по этой главе была отменена для экзамена и не заменена.Поэтому я решил изучать сопрограммы самостоятельно, что было трудно.
У меня есть пример кода в 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>>
Я получаю следующие ошибки:
Псевдоним типа 'Coroutine' циклически ссылается на себя
Псевдоним типа 'NoRes' циклически ссылается на себя
Псевдоним типа «Продолжение» циклически ссылается на себя
Я понимаю, почему это происходит, потому что Coroutine
имеет тип NoRes
, NoRes
имеет тип Continuation
и вот мы вернулисьдля начала, чтобы завершить круг: Continuation
имеет тип Coroutine
.
Чего я не понимаю, так это как решить эту проблему, а альтернатива - как реализовать сопрограмму.Так есть ли у кого-нибудь лучший и рабочий пример, чем приведенный выше?
Зависимости:
Fun:
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
}
Пара:
type Pair<a, b> = { First: a, Second: b }