現在、fp-tsを用いtry~catchを必要としないプログラム構成を勉強中です。
ORMによくあるfind関数のように、
- IDに合致するものがあれば、エンティティオブジェクトを返す
- IDに合致するものがなければ、nullを返す
- DB接続エラー等が発生すればエラーをthrow
する関数があったとして、最終的にnullもしくは例外の時にleft、エンティティがあればrightを返すにはどのように実装すれば良いでしょうか?
find関数のイメージは以下です。
typescript
1async function find(id: number) { 2 if (id < 0) { 3 throw new IllegalArgumentException(); 4 } 5 if (id === 1) { 6 return { 7 foo: "bar" 8 }; 9 } else { 10 return null; 11 } 12}
例外をleftとして扱うために、TaskEither.tryCatch()
を使いました。
typescript
1import * as TE from 'fp-ts/TaskEither'; 2 3TE.tryCatch(() => find(id), (e) => e); // TaskEither<IllegalArgumentException, object | null>
ここから、rightの値がnullの時にTaskEither<IllegalArgumentException | NotFoundException, object>
のようにleft扱いにしたいと考えています。
pipe()
、chain()
、map()
などを使うものと予想しましたが、どのように組み合わせるべきか分かりませんでした。
あなたの回答
tips
プレビュー