Effect.Serviceのaccessors
サービスを展開せずに、直接メソッドを呼び出せるようになるオプション
code:ts
class Sync extends Effect.Service<Sync>()("Sync", {
sync: () => ({
next: Random.nextInt
}),
accessors: true
}) {}
これを
code:ts
const sync = yield* Sync
const n = yield* sync.next
こう書ける
code:ts
const n = yield* Sync.next
関数をそのまま返すスタイルだと無理っぽいmrsekut.icon
code:ts
class Async extends Effect.Service<Async>()("Async", {
effect: Effect.gen(function* () {
return () =>
Effect.gen(function* () {
return yield* Effect.succeed(1);
});
}),
accessors: true,
}) {}
上記はこういうふうに呼べない
code:ts
const a = yield* Async(); // type error
falseのときと同様にこうするしかない
code:ts
const a = yield* Async;
const b = yield* a();
例えば、_という名前をつけるとか
code:ts
class Async extends Effect.Service<Async>()("Async", {
effect: Effect.gen(function* () {
return {
_: () =>
Effect.gen(function* () {
return yield* Effect.succeed(1);
}),
};
}),
accessors: true,
}) {}
code:ts
const a = yield* Async._();
割と意味わからないが