The issue you're encountering with the typing of your `createUser` function is likely due to how ...

I'm getting lost in the syntax here. I'm not getting the expected typing for my main function.
export const createUser = () =>
    Effect.gen(function* () {
        const database = yield* Database;

        const arb = Arbitrary.make(UserSchema);
        const [arbitraryUser] = FastCheck.sample(arb, 1);

        if (!arbitraryUser) {
            const reason = "Failed to generate an arbitrary user.";
            yield* Effect.logError(reason);
            return yield* new ArbitraryError({ reason });
        }

        const db = yield* database.db();
        yield* Effect.log(
            `Arbitrary User Generated: ${JSON.stringify(arbitraryUser)}`,
        );

        const response = yield* Effect.tryPromise({
            try: () => {
                const userId = db
                    .insert(users)
                    .values({
                        email: arbitraryUser.email,
                        password: Redacted.value(arbitraryUser.password),
                    })
                    .returning({ id: users.id });
                return userId;
            },
            catch: (reason) => {
                Effect.logError(reason);
                return new DatabaseError({ reason });
            },
        });

        const userId = Schema.decodeUnknownSync(UserSchema.pick("id"))(response);

        return userId;
    }).pipe(Effect.withSpan("create-test-user"));

const createUser: () => Effect.Effect<{
readonly id: string;
}, DatabaseError, Database>


I don't understand why my tagged ArbitraryError isn't making it.
Was this page helpful?