本文整理汇总了TypeScript中@jonggrang/avar.newEmptyAVar.chain方法的典型用法代码示例。如果您正苦于以下问题:TypeScript newEmptyAVar.chain方法的具体用法?TypeScript newEmptyAVar.chain怎么用?TypeScript newEmptyAVar.chain使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类@jonggrang/avar.newEmptyAVar
的用法示例。
在下文中一共展示了newEmptyAVar.chain方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1:
export function fork<A>(t: T.Task<A>): T.Task<Forked<A>> {
return AV.newEmptyAVar.chain(avar =>
T.forkTask(T.ensure(t, AV.putAVar(avar, void 0))).chain(fib =>
T.delay(10).map(() => [fib, avar] as [T.Fiber<A>, AV.AVar<void>])
)
);
}
示例2: ChannelItem
export function writeChan<A>(chan: Chan<A>, val: A): T.Task<void> {
return AV.newEmptyAVar
.chain(newHole =>
AV.takeAVar(chan.write)
.chain(oldHole =>
T.apSecond(
AV.putAVar(oldHole, new ChannelItem(val, newHole)),
AV.putAVar(chan.write, newHole)
)
)
);
}
示例3: constructor
readonly write: AV.AVar<ChanStream<A>>
) {
}
}
class ChannelItem<A> {
constructor(readonly head: A, readonly tail: ChanStream<A>) {
}
}
/**
* Creates a new `Chan`nel
*/
export const newChan: T.Task<Chan<any>> = AV.newEmptyAVar
.chain((hole: ChanStream<any>) =>
T.both(AV.newAVar(hole), AV.newAVar(hole))
.map(([read, write]) => new Channel(read, write))
);
/**
* Writes a new value into the `Chan`.
* @param chan
* @param val
*/
export function writeChan<A>(chan: Chan<A>, val: A): T.Task<void> {
return AV.newEmptyAVar
.chain(newHole =>
AV.takeAVar(chan.write)
.chain(oldHole =>
T.apSecond(
AV.putAVar(oldHole, new ChannelItem(val, newHole)),