簡體   English   中英

如何轉換任一<Error, Task<any> &gt; 進入 TaskEither<Error, any> 在 fps

[英]How to convert Either<Error, Task<any>> into TaskEither<Error, any> in fp-ts

我有一個管道,它返回TaskEither<Error, any> Either<Error, Task<any>>但我需要的是TaskEither<Error, any>

我怎樣才能將TaskEither<Error, any> Either<Error, Task<any>>TaskEither<Error, any>

是否有任何幫助工具可以執行此操作?

解決方案在這里:

https://github.com/gcanti/fp-ts/issues/1072#issuecomment-570207924

declare const a: E.Either<Error, T.Task<unknown>>;

const b: TE.TaskEither<Error, unknown> = E.either.sequence(T.task)(a);

您可以創建以下轉換:

import { Either } from "fp-ts/lib/Either";
import { Task } from "fp-ts/lib/Task";
import { fromEither, rightTask, chain } from "fp-ts/lib/TaskEither";
import { pipe } from "fp-ts/lib/pipeable";

type MyType = { a: string }; // concrete type instead of any for illustration here

declare const t: Either<Error, Task<MyType>>; // your Either flying around somewhere

const result = pipe(
  fromEither(t), // returns TaskEither<Error, Task<MyType>>
  chain(a => rightTask(a)) // rightTask returns TaskEither<Error, MyType>, chain flattens
); 

// result: TaskEither<Error, MyType>

PS:我本來想只寫chain(rightTask) ,但Error類型不能用這個簡寫正確推斷(注意現在完全確定原因)。

盡管如此,對於這些強大的類型來說,這是一個便宜的價格,並提供您想要的結果!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM